{ "cells": [ { "cell_type": "markdown", "id": "53cc3e7e", "metadata": {}, "source": [ "# Gauss Elimination\n", "**강좌**: *수치해석*" ] }, { "cell_type": "markdown", "id": "71f9848a", "metadata": {}, "source": [ "## Numpy array\n", "Python 에서 Array, Matrix는 Numpy 패키지로 사용할 수 있다.\n", "\n", "몇가지 특징을 살펴보면 다음과 같다.\n", "\n", "- 생성" ] }, { "cell_type": "code", "execution_count": 1, "id": "7401a85c", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[1 2 3]\n", " [4 5 6]]\n", "2 (2, 3)\n" ] } ], "source": [ "import numpy as np\n", "\n", "A = np.array([[1, 2, 3], [4, 5, 6]])\n", "\n", "# Array 출력\n", "print(A)\n", "\n", "# Array 차원, 크기\n", "print(A.ndim, A.shape)" ] }, { "cell_type": "markdown", "id": "83b73ae8", "metadata": {}, "source": [ "- Indexing\n", " * Zero-based Numbering: Index는 0 부터 시작" ] }, { "cell_type": "code", "execution_count": 2, "id": "f45cab79", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "4\n" ] } ], "source": [ "# 2행, 1열의 값 a_{21}\n", "print(A[1, 0])" ] }, { "cell_type": "code", "execution_count": 3, "id": "6c2876c7", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[4 5 6]\n" ] } ], "source": [ "# 2번째 행\n", "print(A[1])" ] }, { "cell_type": "code", "execution_count": 4, "id": "e9eda228", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[3 6]\n" ] } ], "source": [ "# 3번째 열\n", "print(A[:, 2])" ] }, { "cell_type": "markdown", "id": "759e75ad", "metadata": {}, "source": [ "- 연산\n", " * 합, 차\n", " * Scalar 곱" ] }, { "cell_type": "code", "execution_count": 5, "id": "4ac47478", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[1 1 1]\n", " [2 2 2]]\n" ] } ], "source": [ "B = np.array([[1, 1, 1], [2, 2, 2]])\n", "\n", "# Array B 출력\n", "print(B)" ] }, { "cell_type": "code", "execution_count": 6, "id": "09811a71", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[2, 3, 4],\n", " [6, 7, 8]])" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 합\n", "A + B" ] }, { "cell_type": "code", "execution_count": 7, "id": "26dbb5f4", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0, 1, 2],\n", " [2, 3, 4]])" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 차\n", "A - B" ] }, { "cell_type": "code", "execution_count": 8, "id": "f6f0c7c9", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 5, 10, 15],\n", " [20, 25, 30]])" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Scalar 곱\n", "c = 5\n", "c*A" ] }, { "cell_type": "markdown", "id": "15403412", "metadata": {}, "source": [ "- 내적 (Inner product)\n", " * `np.dot` 또는 `@` 연산\n", " \n", "$$\n", "A \\cdot \\mathbf{x} = \n", "\\begin{bmatrix}\n", "a_{1,1} & a_{1,2} & a_{1, 3} \\\\\n", "a_{2,1} & a_{2,2} & a_{2, 3}\n", "\\end{bmatrix}\n", "\\begin{bmatrix}\n", "x_1 \\\\ x_2 \\\\ x_3\n", "\\end{bmatrix}\n", "=\n", "\\begin{bmatrix}\n", "a_{1,1} x_1 + a_{1,2} x_2 + a_{1,3} x_3 \\\\\n", "a_{2,1} x_1 + a_{2,2} x_2 + a_{2,3} x_3\n", "\\end{bmatrix}\n", "$$" ] }, { "cell_type": "code", "execution_count": 9, "id": "c02a0957", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([13, 31])" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = np.array([2,1,3])\n", "\n", "# Inner product\n", "A @ x" ] }, { "cell_type": "code", "execution_count": 10, "id": "dc69c90c", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 2, 2, 9],\n", " [ 8, 5, 18]])" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Elementwise production\n", "A*x" ] }, { "cell_type": "markdown", "id": "472b7c2a", "metadata": {}, "source": [ "- Transpose" ] }, { "cell_type": "code", "execution_count": 11, "id": "500e7498", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[1, 4],\n", " [2, 5],\n", " [3, 6]])" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A.T" ] }, { "cell_type": "markdown", "id": "5fa01f17", "metadata": {}, "source": [ "## Gauss 소거법\n", "- 연립방정식 소거법을 적용\n", " * Forward elimination: Upper triangular matrix 구성\n", " \n", " $$\n", " a_{i,j} - \\frac{a_{i-1, j}}{a_{i-1,i-1}} \\times a_{i,i} ~~~ \\textrm{for}~~j < i\n", " $$\n", " * Backward substitution\n", " \n", " $$\n", " x_i = \\frac{1}{a_{i,i}} \\left (\\tilde{b}_i - \\sum_{j=i+1}^n a_{i,j} x_j \\right )\n", " $$\n", " \n", "### By hand \n", "- 예제\n", "\n", "$$\n", "\\begin{bmatrix}\n", "2 & 1 & 1 \\\\\n", "4 & 6 & 0 \\\\\n", "-2 & 7 & 2\n", "\\end{bmatrix}\n", "\\mathbf{x}\n", "=\\begin{bmatrix}\n", "5 \\\\ -2 \\\\ 9\n", "\\end{bmatrix}\n", "$$" ] }, { "cell_type": "code", "execution_count": 12, "id": "1600f29c", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 2 1 1]\n", " [ 4 -6 0]\n", " [-2 7 2]] [ 5 -2 9]\n" ] } ], "source": [ "# Make matrix, array\n", "A = np.array([[2, 1, 1], [4, -6, 0], [-2, 7, 2]])\n", "b = np.array([5, -2, 9])\n", "\n", "print(A, b.T)" ] }, { "cell_type": "code", "execution_count": 13, "id": "20acded5", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 0 -8 -2] -12\n" ] } ], "source": [ "# first pivot a_{1,1}\n", "# eliminate a_{2,1}\n", "i = 0\n", "j = 1\n", "ratio = A[j, i] / A[i, i]\n", "\n", "A[j] = A[j] - ratio*A[i]\n", "b[j] = b[j] - ratio*b[i]\n", "\n", "print(A[j], b[j])" ] }, { "cell_type": "code", "execution_count": 14, "id": "0bf2ef0e", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0 8 3] 14\n" ] } ], "source": [ "# eliminate a_{3,1}\n", "j = 2\n", "ratio = A[j, i] / A[i, i]\n", "\n", "A[j] = A[j] - ratio*A[i]\n", "b[j] = b[j] - ratio*b[i]\n", "\n", "print(A[j], b[j])" ] }, { "cell_type": "code", "execution_count": 15, "id": "6837cac5", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0 0 1] 2\n" ] } ], "source": [ "# next pivot a_{2,2}\n", "# eliminate a_{3, 2}\n", "i = 1\n", "j = 2\n", "\n", "ratio = A[j, i] / A[i, i]\n", "\n", "A[j, i:] = A[j, i:] - ratio*A[i, i:]\n", "b[j] = b[j] - ratio*b[i]\n", "\n", "print(A[j], b[j])" ] }, { "cell_type": "code", "execution_count": 16, "id": "d1389e74", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 2 1 1]\n", " [ 0 -8 -2]\n", " [ 0 0 1]] [[ 5]\n", " [-12]\n", " [ 2]]\n" ] } ], "source": [ "print(A, b[:, None])" ] }, { "cell_type": "markdown", "id": "33748796", "metadata": {}, "source": [ " * Forward elimination 결과\n", " \n", "$$\n", "\\begin{bmatrix}\n", "2 & 1 & 1 \\\\\n", "0 & -8 & -2 \\\\\n", "0 & 0 & 1\n", "\\end{bmatrix}\n", "\\mathbf{x}\n", "=\\begin{bmatrix}\n", "5 \\\\ -12 \\\\ 2\n", "\\end{bmatrix}\n", "$$ " ] }, { "cell_type": "code", "execution_count": 17, "id": "c6f8a141", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2\n" ] } ], "source": [ "x = np.empty_like(b)\n", "\n", "# Third row\n", "i = 2\n", "xi = b[i] / A[i,i]\n", "x[i] = xi\n", "print(x[i])" ] }, { "cell_type": "code", "execution_count": 18, "id": "1f0fafb8", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1\n" ] } ], "source": [ "# Second row\n", "i = 1\n", "xi = (b[i] - A[i, i+1]*x[i+1]) / A[i, i]\n", "x[i] = xi\n", "print(x[i])" ] }, { "cell_type": "code", "execution_count": 19, "id": "3ff1b9b9", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1\n" ] } ], "source": [ "# First row\n", "n = 3\n", "i = 0\n", "xi = b[i]\n", "\n", "for j in range(i+1, n):\n", " xi -= A[i, j]*x[j]\n", " \n", "xi /= A[i,i]\n", "\n", "x[i] = xi\n", "print(x[i])" ] }, { "cell_type": "code", "execution_count": 20, "id": "0b48396e", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1 1 2]\n", "[ 5 -2 9]\n" ] } ], "source": [ "# Solution\n", "print(x)\n", "\n", "# 검산\n", "A = np.array([[2, 1, 1], [4, -6, 0], [-2, 7, 2]])\n", "print(A @ x)" ] }, { "cell_type": "markdown", "id": "74a81a76", "metadata": {}, "source": [ "### Python code" ] }, { "cell_type": "code", "execution_count": 21, "id": "99718533", "metadata": {}, "outputs": [], "source": [ "def gauss_eliminate(A, b):\n", " \"\"\"\n", " Gauss Elimination\n", " \n", " Parameters\n", " ----------\n", " a : matrix\n", " Linear operator\n", " b : array\n", " Result\n", " \n", " Returns\n", " --------\n", " x : array\n", " Solution\n", " \"\"\" \n", " \n", " # Check size\n", " m, n = np.array(A).shape\n", " l = len(b)\n", " \n", " if (m != n) or (n != l) or (m != l):\n", " raise ValueError('Wrong shape', m,n,l)\n", " \n", " # Forward elimiation\n", " for i in range(n):\n", " if A[i, i] == 0.0:\n", " raise ValueError('Pivot is zero')\n", " \n", " for j in range(i+1, n):\n", " ratio = A[j, i] / A[i, i]\n", "\n", " #A[j, i:] = A[j, i:] - ratio*A[i, i:]\n", " for k in range(i+1, n):\n", " A[j, k] = A[j, k] - ratio*A[i, k]\n", " b[j] = b[j] - ratio*b[i]\n", " \n", " # Back substitution\n", " x = np.empty(n)\n", " \n", " for i in range(n-1, -1, -1):\n", " x[i] = b[i]\n", "\n", " for j in range(i+1, n):\n", " x[i] -= A[i, j]*x[j]\n", "\n", " x[i] /= A[i,i]\n", " \n", " return x" ] }, { "cell_type": "code", "execution_count": 22, "id": "9b6cb77d", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1. 1. 2.]\n" ] } ], "source": [ "A = np.array([[2, 1, 1], [4, -6, 0], [-2, 7, 2]])\n", "b = np.array([5, -2, 9])\n", "\n", "x = gauss_eliminate(A, b)\n", "print(x)" ] }, { "cell_type": "markdown", "id": "2133bbfd", "metadata": {}, "source": [ "### Computational Costs\n", "\n", "- Gauss Elimination 코드 계산 시간 확인" ] }, { "cell_type": "code", "execution_count": 23, "id": "262b8897", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Size of matrix : 2\n", "2.84 µs ± 11.3 ns per loop (mean ± std. dev. of 7 runs, 100,000 loops each)\n", "Size of matrix : 3\n", "5.59 µs ± 208 ns per loop (mean ± std. dev. of 7 runs, 100,000 loops each)\n", "Size of matrix : 4\n", "11.3 µs ± 228 ns per loop (mean ± std. dev. of 7 runs, 100,000 loops each)\n", "Size of matrix : 5\n", "17.5 µs ± 11.1 ns per loop (mean ± std. dev. of 7 runs, 100,000 loops each)\n", "Size of matrix : 6\n", "27.5 µs ± 8.13 ns per loop (mean ± std. dev. of 7 runs, 10,000 loops each)\n", "Size of matrix : 7\n", "41 µs ± 89.9 ns per loop (mean ± std. dev. of 7 runs, 10,000 loops each)\n", "Size of matrix : 8\n", "56.6 µs ± 434 ns per loop (mean ± std. dev. of 7 runs, 10,000 loops each)\n", "Size of matrix : 9\n", "80.6 µs ± 51.2 ns per loop (mean ± std. dev. of 7 runs, 10,000 loops each)\n", "Size of matrix : 10\n", "105 µs ± 1.59 µs per loop (mean ± std. dev. of 7 runs, 10,000 loops each)\n", "Size of matrix : 11\n", "131 µs ± 2.37 µs per loop (mean ± std. dev. of 7 runs, 10,000 loops each)\n", "Size of matrix : 12\n", "174 µs ± 685 ns per loop (mean ± std. dev. of 7 runs, 10,000 loops each)\n", "Size of matrix : 13\n", "219 µs ± 386 ns per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n", "Size of matrix : 14\n", "263 µs ± 5.97 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n" ] } ], "source": [ "size = np.arange(2, 15)\n", "elapsed = []\n", "\n", "for n in size:\n", " a = np.random.rand(n, n)\n", " b = np.random.rand(n)\n", " \n", " print(\"Size of matrix : \", n)\n", " t = %timeit -o gauss_eliminate(a, b)\n", " elapsed.append(t.average)" ] }, { "cell_type": "code", "execution_count": 24, "id": "8beaf31d", "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "from matplotlib import pyplot as plt\n", "\n", "import numpy as np\n", "\n", "plt.style.use('ggplot')\n", "plt.rcParams['figure.dpi'] = 150" ] }, { "cell_type": "code", "execution_count": 25, "id": "1f26e042", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0, 0.5, 'Elapsed time')" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA4sAAAKLCAYAAABfZB3XAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAABcSAAAXEgFnn9JSAADUiUlEQVR4nOzdd3QU1fvH8fdseqeFBELvVXpHEARBwIYCdhG7IiDWn6KIiujXhtgVlCogCogIKAii9C5Ik04CCSShJKQnO78/4g7EbEJb2Gz4vM7hHObO3DvP7uxu9tl7517DNE0TERERERERkTPY3B2AiIiIiIiIFD1KFkVERERERCQfJYsiIiIiIiKSj5JFERERERERyUfJooiIiIiIiOSjZFFERERERETyUbIoIiIiIiIi+ShZFBERERERkXyULIqIiIiIiEg+ShZFREREREQkHyWLIiIiIiIiko+SRREREREREclHyaKIiIiIiIjko2RRRERERERE8lGyKCIiIiIiIvl4uzsAKX7i4uIwTdNt5y9TpgwACQkJbotBLo6uoWfT9fN8uoaeT9fQs+n6eb6icA0NwyAyMvKi2lCyKC5nmqZbk8Uz4xDPpmvo2XT9PJ+uoefTNfRsun6ez9OvoYahioiIiIiISD5KFkVERERERCQfJYsiIiIiIiKSj5JFERERERERyUfJooiIiIiIiOSjZFFERERERETy0dIZUmS4amphRzuePlXxlUzX0LPp+nk+XUPPV9g1NAzjcocjIh5KyaK4jWmapKWlkZmZSXZ2tsvaPX78OAB2u91lbcrlpWvo2XT9PJ+uoecr7BoahoGvry8BAQF4e+uroIgUTJ8Q4hZ2u52TJ09is9kICAjAx8fHZb90Ov7wuTIBlctL19Cz6fp5Pl1Dz1fYNbTb7aSnp3Py5EnCwsKUMIpIgfTpIG6RlpaGt7c3wcHBLh8O42hPw2w8l66hZ9P183y6hp6vsGvo5eVFUFAQkPv3OCQk5LLGJiKeQxPciFukp6cTEBCgLyIiIiJu4ufnR2ZmprvDEJEiTMmiXHamaWKaJl5eXu4ORURE5Irl5eVl/U0WEXFGyaKIiIiIiIjko2RRRERERERE8lGyKCIiIiIiIvkoWRQREREREZF8tHSGSBERFRV11mP69OnD6NGjre1WrVoRExPDoUOHLmFkRVNUVBQVKlRg9erV7g5FREREpFhSsijFUvavszEbtcIoHV7ocWZiPObGldi63HiZIju7Pn36FLivZcuWlzESEREREbmSKVmUYif719nkTP0SFs3B9vTIAhNGMzEe+3svQXwcdigyCeOZPYciIiIiUrTZF83BaNLGIzspzkb3LEqx49WsLYRH5iaB772EmRif75gzE0XCIzGatHFDpCIiIiLiyeyL5mBOH5vvO+fJtKw8a5g6vnua08diXzTHHaFeECWLUuwYpcvi+/xbBSaM/00UC+t99FSLFi1i6NChdOzYkdq1a1OjRg26dOnCmDFjyMjIyHf89OnTiYqK4r333mPPnj089NBD1K9fnxo1anDTTTfx22+/OT3Prl27ePLJJ2nbti3VqlWjYcOGdO3alVdeeYUjR47kO3779u0MHDiQZs2aUbVqVZo2bcpTTz1FdHS00/ZTU1MZOXIkLVq0oFq1anTo0IEvvvhCC0iLiIhIkWA0aZPvO6fdNHl2zlYem7GZvcfSPbqTQsmiFEtG6bLYnh6Z7817JSSKAM888wxz584lJCSEa665hlatWhEbG8vbb7/NPffcQ05OjtN6+/fvp1evXvz999907NiRRo0asX79eu677z6mT5+e59gtW7bQvXt3Zs2aRalSpejevTtNmjQhKyuLcePGsWfPnjzH//zzz/To0YNZs2ZRtmxZunbtSnh4ON999x3XX389O3fuzHN8RkYGd9xxB59++inp6el06dKFihUrMmrUKF566SXXPmEiIiIiF8AoHZ7vO+eSLTH8HZvM5sNJPD1/P9Efveux3z11z6IUOaZpQlrKhdf3/vdlHRCA8fiLmB+/kfvmfenh3PKcHChdFuPxFyEgADP11MUHHRCEYRgX346LvPXWW3To0IHAwECr7NSpUzzxxBMsWrSImTNnOp1IZ+bMmdx222289957eP/7PC5cuJAHHniAYcOGcc011xAREQHAuHHjSE9P56uvvqJHjx552tm1axehoaHW9sGDBxk8eDD+/v5MnTqV1q1bW/tmzJjBkCFDGDp0KD///LNV/vnnn7Nu3TqaNGnCt99+a7W3ZcuWQicBEhEREbmcHAmj/b2XSDl2gokbjoJPEAAtT/5D1KHtHpkogpJFKYrSUrAPvvOCq2cWtOPM3rTEo5gjBuGqwYy2D7+FwGCXtFXYEhrjxo2je/fuZ23D2THBwcG8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oqKoUaMGPj4+7g5F5IqXkW1n3PLTHTwNj++i3Q1dMQKuzMkgi0XPYnp67nS2fgWMIXYkY47jLqYtR3lGRka+Or6+zqfQddQ58/xnO09B9Qry1VdfkZSURM2aNWnZsmW+/c2aNaNBgwZUq1aN0NBQjhw5wpIlS5g3bx6ff/45wcHBTus5M3To0Hxlvr6+vPXWW0DuJDyFMU2T48eP4+3tjWEY53TO8+Fo01kvryeYOXMmkHsPS9u2bfnggw/48ccfee211/LcQ+vQvHlzoqOjiYuL46uvvmLSpEkcOHCAkiVL0rNnT55//vl8vc2DBg1i+vTpzJw5k/T0dEaPHs3ff/+Nj48P7dq148UXX8w3e++0adMYPHgwzzzzDL179+btt99m+fLlJCYm8vXXX1sz9y5atIgvvviCv/76i/T0dCpUqMD111/PoEGD8sTx0EMPMWfOHAYOHMjLL7+c51y7d++mS5cueHl58dtvv1m972fG3a5du3zPwZEjR/j6668ZP348Bw4cIDw8nP79+/PEE09gGIY10/C6devIysri6quv5o033qBixYp5zn/kyBFmzJjBokWL2LdvH4mJidbyOYMGDaJJkybWscuXL6d3797W9pm9nhUrVswz/D0zM5Px48fzww8/sGvXLux2O7Vr1+bee+/lzjvvPKf3w7Jly7j11lu5/fbb+fDDD63ynJwcateuTXJyMs8++yzPPPOMtS8hIYEGDRrQqFEjfvnllzxx9+vXjzFjxuR5HiH3fX7me93xnDtegzabjbi4ON544w3++OMPUlJSqF27Nk8//TTdu3cHLv496Pji7Ofnl6etc30tzp07l48++ogdO3YQHBxMp06dGDZsGDZb7u+kXl5e5xXjjBkzmDhxItu2bSMnJ4cqVapwyy238Mgjj+T70e/M12pmZiZjxozh77//JikpiX/++YewsDCys7P55JNPmDp1KocPHyYiIoJbb72VoUOHFvo5tm3bNj766CNWrFjBsWPHKFmyJJ06deLpp5+mUqVKeY595513ePfdd/nwww+pVasW7733HuvXr+f48eP89ttvNGjQwOljNQyD5cuXc8stt9CvXz9eeuklRo4cyW+//capU6eoWbMmDz/8MH379nVaf+fOnYwePZply5Zx/PhxSpcuzdVXX82QIUOoUaNGnmMdrynDMKzH+8knn/Daa68x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hDfffBPDMJg0aZLTx3zttdfmSxQBJk6caLV55h/ySpUqFbicydixY0lLS+Oll17KN4t2nz596N69O5s2bWLLli356tapU4fHHnvs7A/WCcMweP311/NMtNa4cWP69++P3W63HgvkjlaIj4+nVatW+SYlevjhh7nqqquIjY3N80NUQe6++24Avv322zzl2dnZzJgxA19fX/r06eO07uuvv55neHmlSpWs4eKrV6+2ylesWMH27dupVKkSzz33XJ7XRq9evejevTunTp1yOjuwl5cX77zzTp5Erk+fPpQuXZr9+/dz//3353nPRUZGcssttwCcU+8q5L5+/jszu5+fHyNGjMDb29saVi4iF2/TP4dYmR5sbd+bs4vgFoWPyLkSFIueRcevc/v27XO637G+orNJFM63LUf5mW05fqGMjo4mOzs73/0Bjjpn3ocQFBREmTJlSEhIYP/+/dSpUydPncTERJKTkylTpozTmVC3bt3K6NGjgdx7Yxo1anTWx1YQRwJyLj2vl0NKlp27ZuxydxjnZUqfmgT75r+f8HxER0ezZs0aSpQokWfYXenSpenYsSO//fYb8+fPL3D9LGdfSGvWrEm9evXYunUr27dvp3Hjxmet4+PjQ48ePRg7dixr166lefPmefZfffXVTieYWbNmDYD1ZehMZcqUoWPHjvzyyy+sW7eOG264wdr33HPP8eeffzJ79mx+++03TNNkzJgxlCxZ8rx7h6+++up8ZY73nbN9jvfxmcNjHTIyMvj999/ZuHEjx44dsxKB7du3A7nv67p1655TXCtXriQrK4trrrnG6f1S9evXJzg4mL/++uuc2mvTpg2jR49m5cqV9OvXD7vdbg0HddzLuXLlStq2bcuxY8fYuXMnDRo0cOnMx23atMk3GYe3tzeVKlVi8+bN1n1q56ply5YcOnSInJwcDh06xPz58/nggw+s0RP/va8Uzv5aPHMYsEONGjVo0KCB04TKmaysLDZs2IBhGNx888359tetW5e6deuybds2tm3blu89dt111zltc+PGjdhsNnr27Jlv/80338zzzz+fr/zPP/8EyNfL5tCiRQsWLFjApk2b8s2e3KVLlwvuOWrQoEG++wwh9/Pjk08+ybOGsCMRc/Y5ANC7d282b97M6tWrnX7+nKl169bUqlWLJUuWEBsbayXVCxcu5OjRo9x4441O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tGnTxnreY2JirMnL/uuRRx7h+++/59VXXyUsLCzf5DnHjx/nxx9/pF+/fi5939jtdl555RXGjh1rtbt582bGjx+PzWazkjmAG264gVGjRrF69WomT56cZ9+4cePYtGkT5cqVo3v3c584olmzZtSrV89KrLt3737ey0QVpG3bttStW5ft27fzzjvv8Pzzz1s//i1YsID58+cTFBTksuT0fDg+e6ZOnUrnzp2tH3L++ecf3nzzzcsej0hxk5N0gi93pMO/E5RXzjrO9d0vfB6Q4qpYJYsinmjx4sUkJiZSvXp1K9FzxsvLi549ezJhwgRmzpzJiy++mGd/79696dWrF+3atSMkJITVq1dz9OhRateuzTPPPOO0zXvvvZdnnnmGyZMnU7lyZbZv387OnTsJDg7mgw8+OK/H0aRJE5599lnefvttbrzxRtq0aUOpUqVYu3Ythw8fpmrVqowcOdI6/scff2TmzJnUrl07z2O5/vrruf3225k2bRqvvvqqtazE5VKmTBnuuOMOpkyZQteuXWnXrh3+/v6sWbOGnJwc+vbty3fffZevXteuXa3ZSdu2bUtgYCClSpWyHtvrr7/OgQMHmD17NosWLaJ+/fpEREQQHx/Pvn37iIuL44EHHjjnZDEgIIBGjRpZM1H+NyF0DEV1tq8wHTt2xN/fn6+++oqdO3cSERGBYRg8+uijTocXX6wJEyYwatQo6tWrR5UqVTBNk0OHDrF582bsdjutW7fm//7v/86rzcqVK/Piiy/y6quv0qdPH+u1uGbNGgzDoEuXLixatOic2+vVqxd33XUXU6ZMoXPnzrRr146AgABWrlxJYmIiTZs2LfA9VpDevXszf/585s+fT4cOHWjfvj2mafLnn3/SunVrDMPIN1y2WrVqfPTRRzz55JPcf//9VK9enZo1a2KaJjExMezatYvMzExuueUWlyaLXbp0Yfv27bRt25ZWrVqRnJzM8uXLycrKYvDgwXmW7AkMDOSjjz6if//+PP/880yZMoVq1aqxe/du/v77bwIDA/nkk0/OezTL3Xffbb2XXHnbhGEYfPTRR/Tp04ePPvqIBQsWUL9+fQ4dOsTatWvx9vbmvffec8sw1L59+/LFF1+wcOFCOnToQKNGjThx4gSrVq2iW7dubNq0qcAhwiJydou+/4U9QadXE3ioTUW8vYrNoEuX0TMi4maOYU5nm0YeTvc8zpw5M1/vyBtvvMELL7xATEwMv/76K4ZhWL19BS2ZcMMNN/DNN99gs9n45ZdfiI2NpVu3bvz000+FJq4FGTRoEBMmTKB169b89ddfzJ8/H19fXx5//HHmzp1r3XN26NAh/u///g9fX1/GjBmTb5bJN998k8qVKzN58mR+/fXX847jYo0aNYpXXnmFSpUqWcM8r776aubPn1/grIkPPPAAgwcPJigoiHnz5jF16tQ8wwkDAgKYOnUq7777Lg0bNmTnzp0sWLCA/fv3U6VKFYYNG+b0XtTCOJLAM+9X/O8+wzDOawhdZGQkX3/9NU2bNmXNmjVMmzaNqVOnXrL7o55//nluuukmUlNTWbp0Kb/++iuHDh2iQ4cOfPDBB8yYMSPPupTn6qGHHuLzzz+nfv36rF27lmXLltGmTRt++uknSpYsed7t/e9//+PDDz+kQYMGrFq1ikWLFlGmTBmef/55vvvuu/NOzgzD4LPPPuP555+ndOnSLF68mK1btzJgwADGjh1b4ND2Hj16sHDhQu6++26ys7NZsmQJK1eutJLECRMmuHSJFMi9b3POnDm0b9/euke2Zs2avP/++zz33HP5jr/66quZN28eN998M7Gxsfz888/Ex8dbCfKFDOl0DMEtV67cOU3sdj7q1q3LL7/8wl133UVKSgo///wze/bsoXv37syePTvPUj+XU6lSpfj555+55ZZbyMzMZOHChcTFxfHMM8/w6aefuiUmkeIief1qJhvVre32/sk0rO387/uVzjA16F1cLDY2ttB7KUzTJDExkdKlS1+SG4jdMcGNO7Vq1YqYmJjzmrRjyJAhzJgxgxkzZjhdj8zdrrRrWNzo+nk+b29vli9fTu/evenTp0+BQ2MvlzFjxvD2228zdOhQnn76abfG4inO5X14qf8ey4Vz/LgaHx/v5kiKHzP1FF9+MZt5ZXNvAfOzZ/HJLbUID3bt/B1F4RoahlHgUlfnSj2LIiIiUmQlJyczfvx4fH19ueuuu9wdjoh4uP3ffceC8NPrpfepEeTyRLE40T2LIiIiUuRMnz6dlStXsnr1ao4cOcJDDz10XjObi4j8l/3vjXyVEoG9RO6kaeVsGdzcUpNAFkY9iyIiIlLkrFy5khkzZpCSksKAAQPOe6IjEZEzmemp/PnTIraWOH2v4gPtq+KjSW0KpXsWxeV0z6JcLF1Dz6br5/l0DT2f7ln0bEXhfrfiJnXKlwxMv4pE/xIANC9l4+XrL12vYlG4hrpnUUREREREpBDmP3/z/YEsK1H0xs6D7au4NSZPoWRRRERERESKJTMjg0PfTuTHih2tspvqlqJciK8bo/IcShZFRERERKRYMud8y9el2pBtyx2aXdoX+jQs6+aoPIeSRRERERERKXbMff+wdv0O1peua5X1b1GeAB+lQOdKz5RcdoZhYBgGOTk57g5FRETkipWTk2P9TRYpbsysLDImfMw31W+wyuqH+3N15RA3RuV5lCyKW/j7+5OWllborKkiIiJy6WRkZODrq/u2pHgy581gjldVYgPLAGDD5OEWkfpx5Dx5uzsAuTIFBARw8uRJkpKS8Pf3x8fHx2VvXkcCqkTUc+kaejZdP8+na+j5CruGOTk5ZGRkkJ6eTlhY2OUOTeSSM6P3Ef/bL3zf/Gmr7PrapahS0t+NUXkmJYviFjabjRIlSpCWlkZaWhrJyckubRvAbre7rE25vHQNPZuun+fTNfR8hV1DwzDw9fUlLCzMWo9RpLgwc3Kwjx/DxCrXk+GV23Me6mvjzoZl3ByZZ9InhLiNYRgEBgYSGBgIuO4X7KKwCKpcHF1Dz6br5/l0DT1fYddQw/CkODN/ncXWkybLqjW2yu5pUpZgPy/3BeXBlCxKkeGqP16OdvTH0HPpGno2XT/Pp2vo+XQN5UpkxsaQPWc6Yxs/bpXVKOVPl+oabn2hNMGNiIiIiIh4NNOeg33CGH6JaMaB4HJW+cMtIrDpR5MLpmRRREREREQ8mrn4Z04ejGZqleusss7VwqhdJsCNUXk+JYsiIiIiIuKxzPg4zFmTmFK1Oyk+uXNhBPrYuK9xuJsj83xKFkVERERExCOZpol94sfs9gvnt3ItrPLbG5ahRICmZ7lYShZFRERERMQjmX/+in3HFr6qeROmkZvaVAzzpWftkm6OrHhQsigiIiIiIh7HPJaAOeNrfo9syq7Qylb5Q80j8LZpUhtXULIoIiIiIiIexTRN7JM/JSXLZFK1HlZ520ohNIoMcmNkxYuSRRERERER8Sjm6t9hyzq+q9KFk74hAPh6GQxoWta9gRUzShZFRERERMRjmEnHMaeNJTqwLPOi2lnlt9UvTXiQjxsjK36ULIqIiIiIiMewf/sFZkoy42reRI7NC4CIYB9uqVfKzZEVP0oWRURERETEI5jrV8D6FawMb8jmkjWt8gealsXXS6mNq+kZFRERERGRIs88lYT928/JsPkwvnovq7xJuSBaVgh2Y2TFl5JFEREREREp8szp4yDpBDMrdSLBP3cdRW8bPNi8LIahpTIuBSWLIiIiIiJSpJlb1mGuWkKcfylmV+pold9QuxQVQv3cGFnxpmRRRERERESKLDMtFfukTwEYX6MXWbbcGU9LBnjTt2Fpd4ZW7ClZFBERERGRIsv8fjwcT2BjyVqsKdPAKu/fJJxAHy/3BXYFULIoIiIiIiJFkrn9L8w/FpBleDGu5k1Web3wADpWCXVjZFcGJYsiIiIiIlLkmBnp2Cd+DMDPFdpzODAcAJsBDzWP0KQ2l4GSRRERERERKXLM2ZMh4QjHfEP5rnIXq7xbjRJUK+XvxsiuHEoWRURERESkSDF3b8f87ScAJlbvQbp37oynIb427mwU7s7QrihKFkVEREREpMgwszKxT/gITJPtYVX4I6Kpte+uRuGE+mlSm8tFyaKIiIiIiBQZ5k/TIC6GHAzG1jg9qU21kn5cV6OE+wK7AilZFBERERGRIsE8sAfzl5kALCzfin0hUda+h5tH4GXTpDaXk5JFERERERFxOzM7G/v4MWC3k+wdyLfVrrf2XVMllLplA90Y3ZVJyaKIiIiIiLidueAHiNkHwLdVu3HKOwAAf28b9zUt687QrlhKFkVERERExK3MQwcx504HYG9weX4t39rad3vD0pQK8HZXaFc0JYsiIiIiIuI2pj0H+4QxkJONCYytexumkXtvYlSoL71ql3JvgFcwJYsiIiIiInLJ2BfNwUyML3C/uWgO7PsHgD8imrAjqIK176HmEfh4aVIbd1GyKCIiIiIil4R90RzM6WOxv/eS04TRPHIYc/YUAFK9/JhQrae1r1WFYJqUC7pssUp+ShZFREREROSSMJq0gfBIiI/LlzCadjv2iR9BViYAMyp34YRfKAC+XgYPNNOkNu6mZFFERERERC4Jo3Q4tqdHOk0YzaUL4J+tAMQEhjO3Ynur3i31ShER7OuWmOU0JYsiIiIiInLJOEsY7Xu2Y37/DQAm8HXNm8kxvAAID/Tm1nql3RixOChZFBERERGRS+q/CaP51guQmQHAmjL12VSypnXsgGZl8fNWmlIU6CqIiIiIiMglZyWMNhu5/YmQYfPmm6vusI65KjKQNhVD3BSh/JeSRRERERERuSzMk8fBbre2f6x0DUftufcmehm5S2UYhpbKKCqULIqIiIiIyCVnTziK+d5L1vZRvxLMrNjJ2u5VuySVwvzcEZoUQMmiiIiIiIhcUmZiPOabT1v3KQKM7/AEmV4+AJTISqFfBXdFJwVRsigiIiIiIpeMmRiP/Z0XIPmkVfZXo26sygqztu/ZPRf/D1/Osw6juJ+SRRERERERuSTMxHjs774EZySB2f5BjKvQ1dquHeZNR/uhfOswivspWRQRERERkUvC3LgSEuLylP183UBiUnInuTGAh9tUwPvMZTU2rnRDpOKMkkUREREREbkkjFYdwff0pDUx9dvx7aky1nbXGmHUKO1vLath9HsQW5cb3RGqOKFkUURERERELgnz2y+sSW1yfAP4qHpvsuy5ayyW8Pfinkbh1rFG6XAlikWMkkUREREREXE5c8MKzHXLrO2Z1w1iV1KOtf14q0hC/b3dEZqcIyWLIiIiIiLiUuapJOyTP7O299Zrz3cppa3tztXCaFUhxB2hyXlQsigiIiIiIi5lTvvKWiojyzeAMVVvJid39CllAr15sFlZN0Yn50rJooiIiIiIuIz51xrM1Uut7WnXDuLgv7OfAgxqU44gXy93hCbnScmiiIiIiIi4hJlyCvukT63tHXU78GP66eGnPWuVoFFkkDtCkwugZFFERERERFzC/G4cnDwGQLpvIGOq3MC/k59SPsSH+5po+KknUbIoIiIiIiIXzdyyHnPFb9b2pE5PEpeWmynaDBjcpjx+3ko/PImuloiIiIiIXBQzNQX7pE+s7b/qdGR+xunhp7fULUWd8AB3hCYXQcmiiIiIiIhcFPP7b+B4AgApvkF8XLmXta9yCT/uuKqMu0KTi6BkUURERERELpi5bSPmn79a2193fJLEjNzhp942GNKmHD5eSjs8ka6aiIiIiIhcEDM9FfuEj63tNXU6sySrlLXdr2EZqpXyd0do4gJKFkVERERE5IKYP0yAY/EAnPQP5bOK3a19NUv7c2u90gVVFQ+gZFFERERERM6buWMz5u/zc/8PfNnuCU5m5e7z9TIY0qYcXjbDfQHKRVOyKCIiIiIi58XMSMc+8fTw0z/rdGFlTklr+97G4VQI83NHaOJCShZFREREROS8mLMmQXwcAIn+Jfgq6jprX4OIQHrWLllQVfEgShZFREREROScmbu2YS6em/t/4NO2j5OSk7svwNvGoNaR2AwNPy0OlCyKiIiIiMg5MTMysI8fA2bu0hgL63Rno72Etf+BZmWJCPZ1U3TiakoWRURERETknJhzpsDRwwDEBZRhfPnO1r7m5YPoUj3MXaHJJaBkUUREREREzsrcswNz4RwAcjD4uPWjpNtz9wX72niidTkMDT8tVpQsioiIiIhIocyszH+Hn+Zmhz/X7ck2M9Ta/0iLSEoFeLsrPLlEitUVzczMZPbs2SxfvpyEhASCg4Np1KgR/fr1o3Tp81sQNCUlhRkzZrBmzRpOnDhBiRIlaNGiBX379iUoKMhpHbvdzvz581m8eDFxcXH4+/tTv359+vbtS4UKFQo81/r165kzZw779+8HoEqVKtx44400a9Ys37Hx8fGsW7eOTZs2cejQIY4dO0ZAQADVqlWjW7duNG/e3KWPSURERETE/GkqxMUAEB0UwZTIq3NntwHaVQqhQ5XQQmqLpzJM89+7Uz1cZmYmr7/+Ojt37qRkyZLUqVOH+Ph4du/eTWhoKG+88QaRkZHn1FZycjLDhg0jNjaWiIgIqlWrRkxMDNHR0URGRjJy5EhCQkLy1DFNkw8++IBVq1YRFBREgwYNSE5OZvv27fj4+DB8+HBq1qyZ71zz5s1j/PjxeHl50bBhQ7y9vdm8eTOZmZn079+fHj165Dn+5ZdfZufOnfj6+lKzZk3CwsI4cuQIe/bsAaBnz57cd999LnlMFyo2NhZ3vqzCw8OB3MRaPJOuoWfT9fN8uoaeT9fQsxW162fu34V91LNgt5Nt2Hix40vsJvd7Ywl/Lz7qVY1QPy83R1m0FIVraBgG5cqVu6g2ik3P4qxZs9i5cye1atVi2LBh+Pv7AzB37lwmTpzIZ599xogRI86prQkTJhAbG0vLli156qmn8PLKffF//fXXLFiwgAkTJjBw4MA8dZYsWcKqVasoV64cI0aMoESJEgCsWrWK999/nzFjxjB69GirLYDDhw8zadIkK5msVauWVf7yyy8zadIkmjRpkucilylThg4dOnD11VdbjxFgw4YNvPPOO/z88880btyYRo0aXfRjEhEREZErm5mVlTv81J47/HRm3RutRBFgYKtyShSLsWJxz2J2djYLFiwA4IEHHsiTRPXq1YvKlSuzfft29u7de9a2Tpw4wZ9//omXlxcPPvhgnuTunnvuITQ0lGXLlnHixIk89ebOzV1r5q677rISRYDWrVvTvHlzjhw5wtq1a/PUmTdvHjk5OXTt2tVKFAHKly/PLbfcQk5ODvPnz89TZ/DgwXTt2jXPYwRo2rQpnTp1AmD58uUueUwiIiIicmUz530Hhw4AsCc4ihkRbax9XaqH0aJCsLtCk8ugWCSLO3bsICUlhYiICKpWrZpvf6tWrQBYt27dWdvauHEjpmlSr169PEkfgI+PD82aNcNut7Np0yar/OjRo8TExODr60vTpk3ztdm6dWsg997EM23YsCHP/jO1adPGaZ3CVK5cGYDjx49f9GMSERERkSubeXAP5vzvAci0eTOm+YPkmLmznYYHevNAs7LuDE8ug2KRLB44kPtrh7NEEaBatWp5jruYthzljslozvx/xYoV8fbOP7LXUefM86ekpJCQkADkTmjzX6VLlyYkJIT4+HhSU1PPGjfAkSNHAAgLy7u+zYU8JhERERG5cpnZWdi/GQM5OQBMq3sz0ZyeEHFQm3IE+mj4aXFXLJJFR9JV0IynpUqVynPcubTlqPNfjnOc2dbZzl9YnaCgoHxDSgurV5CUlBT++OMPAFq0aJFn34U8JhERERG5cpnzf4CYfQBsD63Mj+Gnv1/2ql2SqyI1k/6VoFhMcJOeng6An5+f0/2OZMxx3MW05SjPyMjIV8fX17fQOmee/2znKaheQb766iuSkpKoWbMmLVu2zLPvQh5TYYYOHZqvzNfXl7feegvInYTHnRy9u45ZqMTz6Bp6Nl0/z6dr6Pl0DT2bu69f1v7dJM77DoA0L18+bjoAk9zhp5VKBjC0S1381atYKHdfQ1cpFj2LZ1um4XyWcXAcaxjGecdxPnUu5jz/NXv2bFasWEFwcDCDBg3K16YrzyUiIiIixZeZk83Jj0ZCdjYAk+rdRiwBANgMGHZdLSWKV5Bi0bMYEJD7Ai6oZ8xRXtBwT2dtFdSb52jrzF46R7vnc/6znedc4/7999+ZOnUqfn5+vPDCC0REROQ75kIeU2Hef//9QvcnJCRonUW5KLqGnk3Xz/PpGno+XUPP5s7rZ583A3PPDgA2lazJgtKNrX2965UmwjtDr6tzUBTeg65YZ7FY9Cw6hj0mJiY63X/s2LE8x51LW446/+U4x5ltne38hdVJSUkpMIlzVu9Ma9eu5fPPP8fLy4tnnnkmz/IbF/uYREREROTKYh4+iPnTVABSvP355Kp7rH1VSvhxe0Pn83NI8VUskkXHkhH79u1zut+xvqLjuItpy1F+ZluO2Uyjo6PJ/rfL3lmdSpUqWWVBQUFWcuZsFtLExESSk5MpU6YMgYGB+fZv3bqV0aNHAzBo0CAaNWrk0sckIiIiIlcO056DffwYa/jpuHp9SDRyR7d522BI23L4eBWL1EHOQ7G44nXq1CEwMJAjR444TYhWr14N4HQNxP9q3LgxhmGwfft2Tp48mWdfVlYW69evxzAMmjRpYpWXLVuWqKgoMjMzrbUTz7Rq1SoAmjVrlqfcEY9j/5lWrlxZYMx79+7lf//7H9nZ2Tz66KNO12m82MckIiIiIlcOc+Ec2PcPAKvL1Of3Ug2tfbc3LEPVkme/nUuKn2KRLHp7e9O9e3cAvv766zzDOufOncuBAweoU6cONWrUsMoXLFjAkCFD+Pbbb/O0VbJkSdq1a0d2djZjx44l59+1ZQAmT55MUlIS7du3z7e4fa9evQCYMmVKnoRs9erVrFu3jrJly+Zb0qJHjx7YbDYWLlzIP//8Y5XHxsYya9YsbDYbPXr0yFPn8OHDvPnmm6SlpdG/f3+uueaasz4/F/qYRERERKT4M+MOYf44BYATPkF8Vv92a1/tMv70rqfhp1eqYjHBDUDv3r3ZsmULO3fuZPDgwdSpU4eEhAR27dpFSEgIjz/+eJ7jk5KSOHz4MMePH8/XVv/+/dm1axerV69myJAhVK9enejoaKKjo4mIiOC+++7LV6dTp05s3LiRNWvWMGTIEBo2bEhycjLbtm3Dx8eHJ5980ppC16F8+fLcfffdTJw4keHDh3PVVVfh5eXF5s2byczM5N5776V8+fJ56owePZqkpCRCQ0PZu3cvn3zySb5YoqKiuPnmmy/6MYmIiIhI8Wbac7BPGANZmZjAl/X7kWTkTnro62UwuE15vGyaUf9KVWySRV9fX4YPH86sWbNYtmwZa9euJSgoiI4dO9KvX7/zmrwlNDSUUaNG8d1337F27VrWrFlDWFgY3bt3p2/fvgQHB+erY7PZGDp0KPPmzWPJkiWsX78ef39/WrRoQb9+/ahYsaLTc/Xq1YvIyEh++ukntm/fDkC1atW48cYbad68eb7jU1JSgNxkd+nSpU7brFevXr5k8UIek4iIiIgUb+bin2F37nfQPyKasKpEHWvfvY3DiQp1vo64XBkM051rHEixFBsbq6Uz5KLoGno2XT/Pp2vo+XQNPdvlun7m0VjsI56EzEwS/MIY0vo5Ug0fABpGBPLatRWxaZ3uC1IU3oNaOkNERERERM6babdjn/ARZOYOP/203u1WohjgbWNQ63JKFEXJooiIiIjIlcZcugD++RuAX8u3ZlNYdWvfg83LUjbYx12hSRGiZFFERERE5ApiJhzB/GE8AHH+pZhQ80ZrX4uoIK6tFuamyKSoUbIoIiIiInKFME0T+8SPISOdHAw+qn8n6UbunJchvjYeb1UOQ8NP5V9KFkVERERErhDmn7/A9r8A+Kni1WwPqWTte7RlJKUCis1iCeICShZFRERERK4AZmI85oxvADgYGMG31a639l1dOYT2lUPdFZoUUUoWRURERESKOdM0sU/6GNLTyDZsjKl/B9mGFwAl/b14uEWkmyOUokjJooiIiIhIMWeu+A22bgTgh0qd2RtU3to3sHU5Qv283BWaFGFKFkVEREREijHzeCLm9HEA7AmO4vsqXax9XaqH0Twq2F2hSRGnZFFEREREpJgyTRP75E8hLYVMmzdj6t1BjpGbApQN8uaBZmXdHKEUZUoWRURERESKKXP177B5LQBTq3QjOvB0cjioTTkCfTT8VAqmZFFEREREpBgyTx7HnPoVANvCqjCnYgdr3w21S9IwIshdoYmHULIoIiIiIlLMmKaJfcpnkHqKNC9fPqp7O6ZhABAV6ss9jcPdHKF4AiWLIiIiIiLFjLluGWxcBcDEaj054l8KAJsBQ9qUw89baYCcnV4lIiIiIiLFiJl8EvPbLwDYWLIWv0S1sfbdWq80tcoEuCs08TBKFkVEREREihHz2y/gVBKnvAP4pE4fq7xqST/6NSzjxsjE0yhZFBEREREpJswNK3KHoALjatzIMb8wALxtucNPfbwMd4YnHkbJooiIiIhIMWCeSsI++TMAVpVpwNLIZta+O64Kp0pJf3eFJh5KyaKIiIiISDFgTvsKkk9ywieIz2vfapXXLuPPLXVLuTEy8VRKFkVEREREPJy5aTXm6qWYwOe1biXJJ3cNRV8vgyFtyuNl0/BTOX9KFkVEREREPJiZcsoafro0oilrwhtY+/o3KUv5UF93hSYeTsmiiIiIiIgHM6ePhZPHSPALY2zNm6zyqyIDub5WCfcFJh5PyaKIiIiIiIcyt6zHXLkYE/ikdh9SvXPXUAz0sTGodTlshoafyoVTsigiIiIi4oHM1BTsEz8G4JfyrfmrVC1r34PNyhIe5OOu0KSYULIoIiIiIuKBzO+/gROJxAaUZkL1XlZ5i6hgOlcLc2NkUlwoWRQRERER8TDmto2Yf/5KDgYf1elLhlfuJDYhfl480SoSQ8NPxQWULIqIiIiIeBAzPRX7hNzhpz9V7MCOsKrWvsdaRlAywNtdoUkxo2RRRERERMSDmD9MgGPxHAiK4Nuq3azyDpVDaVcp1I2RSXGjZFFERERExEOYOzZj/j6fbMPGmDq3k23L7UUsGeDNwy0i3BydFDdKFkVEREREPICZkW7Nfvp95WvZFxJl7RvYKpIQPy93hSbFlJJFEREREREPYM6aBPFx7AqpwPeVO1vl19UIo3lUsBsjk+JKyaKIiIiISBFn7tqGuXguGTZvPqrTD7uR24tYNsiH+5uWdXN0UlwpWRQRERERKcLMjAzs48eAafJt1e7EBOXem2gAg9uUI9BHw0/l0lCyKCIiIiJShJlzpsDRw2wNq8rcCu2t8hvqlKRBRKAbI5PiTsmiiIiIiIib2BfNwUyML3C/uWcH5sI5pHn58XGdvphG7tf3CqG+3N0o/HKFKVcoJYsiIiIiIm5gXzQHc/pY7O+95DRhNLMy/x1+amd89Z4cCSgNgM2AIW3L4eetr/JyaekVJiIiIiLiBkaTNhAeCfFxThNGc85UiIthQ6laLCzf2iq/rX5papYOuNzhyhVIyaKIiIiIiBsYpcOxPT3SacKYtWsb5oKZnPIO4NPafaw61Ur60bdBGXeFLFcYJYsiIiIiIm7iLGHMPhzNiQ9GACZja97EMb8wALxtBkPalsfHy3Bv0HLF8L5UDa9bt45NmzaRkJBAZmYmr7zyirUvPT2dAwcOYBgGtWrVulQhiIiIiIgUeY6E0f7eSxAfR8ITt4NpZ2WZBvwR0dQ67q6rylC5hJ8bI5UrjcuTxYSEBN577z327t1b4DE+Pj58+OGHJCYm8s4771CpUiVXhyEiIiIi4jGshPHFh8GewwmfYD6vfau1v06ZAG6qW8qNEcqVyKXDUDMyMhg5ciR79+6lVKlSdOvWDT+//L9+eHl50blzZwDWrl3ryhBERERERDySmZUB9hxM4LPat5LsEwSAn5fBkLbl8LJp+KlcXi5NFn/55RcOHz5M1apV+eCDDxgwYAD+/v5Oj23RogUAmzdvdmUIIiIiIiIex0yMx3zzGQB+j2jG2jL1rX331Q6kXIivu0KTK5hLk8VVq1YBcO+99xaYJDpUrFgRm83G4cOHXRmCiIiIiIhHMRPjsY96FtJSiQkMZ2zNm6x9Vx37h+tmvO50HUaRS82lyeLhw4ex2WzUqVPn7Ce22QgMDCQlJcWVIYiIiIiIeAwzMR77u/8HJ4+R4uXP2w3uI807t9Ml0NtgYPzv2ApYh1HkUnNpspiVlYWvry8227k1m5GRgY+PjytDEBERERHxCGZifO4MqAlHsWMwpm4/DgWWtfYPbluesoP/z+k6jCKXg0uTxbCwMNLT08+pt3D//v1kZWVRqpRmdRIRERGRK4+5cSXExwHwfeVr89yneH+rirSuGJJvHUZz40p3hStXIJcmi441E1euPPuLeObMmQDUq1fPlSGIiIiIiHgEo00n8A9kXem6TKt6nVXepkpJHmhd+fRx/yaMRr8HsXW50R2hyhXKpcniddflvshnzJhBTEyM02MyMjIYO3Ysq1evBqBr166uDEFERERExCOY337BYSOQ0XVvt8rKhfjwavc62Iy8y2QYpcOVKMpl5+3KxurVq0enTp1YsmQJL774Ik2bNiUjIwOAOXPmcPDgQTZs2GANU+3ZsydVqlRxZQgiIiIiIkWeuW4ZqetX81bTgaR6BwDg723jxQ4VCPF36Vd0kQvm8lfiww8/jL+/P/Pnz88zHHXKlCl5juvZsyf33HOPq08vIiIiIlKkmSePkz3lM8bU6UtMUIRVPqRNOSqV8HNjZCJ5uTxZtNls9O/fn2uvvZbffvuNnTt3cvz4cex2OyVKlKB27dpce+216lEUERERkSuOaZrYJ37MzFLNWR3e0Cq/rX5p2lQKcWNkIvldsj7uihUr0r9//0vVvIiIiIiIxzFX/MaGmCSmNrzVKmtaLog7ryrjxqhEnHPpBDciIiIiIuKcmXiUw7N+4IO6d2AauV/DI4J9eLpdebxsxllqi1x+ShZFRERERC4x024nZfwnvF2zLyk+gQD4ecGLHaII9vNyc3Qizl2yYag7d+7kwIEDpKSkkJOTU+ixt91226UKQ0RERETE7eyLf+YTWz0OBpezyga1KU+Vkv5ujEqkcC5PFjdu3MjYsWNJSEg45zpKFkVERESkuDLjYpi1eg8rqnS3ym6pW4r2lUPdGJXI2bk0Wfz777/53//+h91uByAyMpKwsDC8vNS1LiIiIiJXHjMnhw3fzmBK5W5WWaNwX+5pHO7GqETOjUuTxRkzZmC326levTqDBw8mIiLi7JVERERERIqp2J9/4v1SHbH/O6FNWZ8cnulYWRPaiEdw6QQ3+/btA2DQoEFKFEVERETkipa2bw9vxYZx6t8JbXzNHP6vS3VCNaGNeAiXJoteXl4EBAQQGRnpymZFRERERDyKPTOTT37ZyoEzJrR5okU41UppQhvxHC5NFitUqEBmZiaZmZmubFZERERExKP8OGsJf4bUsrZvLJvNNbXLujEikfPn0mSxa9eu5OTk8Oeff7qyWRERERERj/HX+u1MzKpobTfkOP2vre/GiEQujEsnuOnQoQNbtmxh/Pjx+Pv7065dO1c2LyIiIiJSpB05dop3/k7H7h0AQJnMJJ659SpNaCMeyeXrLD7xxBOEh4czZswYvv32W6pXr46/f8Fjsw3D4LHHHnN1GCIiIiIil1VGtp235m8n2TsEAN+cLP6vWSglQoPcHJnIhXF5srho0SLmzZsHQEJCAgkJCWeto2RRRERERDyZaZp88ut29hJilT3mf5AaV/V0Y1QiF8elyeLatWv56quvAPDz86NWrVqEhYXh5aXpgUVERESk+PppSxxLj5/+ztvzxGY6PXyLGyMSuXguTRbnzJkDQOPGjRkyZAgBAQGubF5EREREpMjZciSFbzYfByN37sj6J/Zyf6/mGD4+bo5M5OK4dDbUgwcPAvDoo48qURQRERGRYi8+JYt3lhzA/m+iWDr9BM9USsOncjU3RyZy8VyaLHp7exMYGEjJkiVd2ayIiIiISJGTkW1n1JKDnMzJ/UrtY8/iuRNLKdnjZvcGJuIiLk0WK1euTHp6Omlpaa5sVkRERESkSDFNk8/WxLHnZJZV9sieOdS+624MzdchxYRLk8UePXpgt9v55ZdfXNmsiIiIiEiRMu+fEyzZl2RtX39oOddefRVGZJQboxJxLZcmi82bN+fWW29l+vTpzJ49m8zMTFc2LyIiIiLidluPpjJu/RFru+6JffS37cfopGUypHhx6WyoI0aMAMDf35+pU6fyww8/UKFCBfz9/QusYxgGr7zyiivDEBERERG5JBJSs3j7z0PkmLnbpTJO8sye7/F7aRSGzaX9MCJu59Jkcdu2bXm2MzMz2bt3rytPISIiIiLiFlk5dt764xAn03MA8LZn8+zWSZS69Q6M0mXdHJ2I67k0Wbzttttc2ZyIiIiISJFgmiafrz3CrsR0q+yhXbOpXTUSo+21boxM5NJxabLYp08fVzYnIiIiIlIk/LL7BIv2nLS2rzu8iq7J27E9/TGGYbgxMpFLRwOrRUREREQKsT0+la/WnZ7QpvbJ/Tyw60dsdz+OEab1xaX4UrIoIiIiIlKAxNQs3v7jENn23O0SGUk8u3Uyvi3aYzRr597gRC4xlw5DdbfMzExmz57N8uXLSUhIIDg4mEaNGtGvXz9Kly59Xm2lpKQwY8YM1qxZw4kTJyhRogQtWrSgb9++BAUFOa1jt9uZP38+ixcvJi4uDn9/f+rXr0/fvn2pUKFCgedav349c+bMYf/+/QBUqVKFG2+8kWbNmjk9x6pVq9i9eze7d+9m3759ZGRk0KVLFx5++OECz/HEE08QHx9f4P4PPviAqCitCyQiIiLikJVj8vafhzn+3wltArwx7iz4e5dIcXHByeLAgQMBiIyMZNiwYXnKzodhGHz00UcXGoYlMzOT119/nZ07d1KyZEmaN29OfHw8v//+Oxs2bOCNN94gMjLynNpKTk5m2LBhxMbGEhERQYsWLYiJiWH+/Pls3LiRkSNHEhISkqeOaZqMHj2aVatWERQURNOmTUlOTmb16tVs2LCB4cOHU7NmzXznmjdvHuPHj8fLy4uGDRvi7e3N5s2befvtt+nfvz89evTIc3xaWhqjR4++4OepY8eOTssDAwMvuE0RERGR4mjs+iPsTEizth/YPYe6SQewDRqOERRSSE2R4uGCk0VHL5WPj0++MneYNWsWO3fupFatWgwbNsxa23Hu3LlMnDiRzz77zFoH8mwmTJhAbGwsLVu25KmnnsLLywuAr7/+mgULFjBhwoR8ifGSJUtYtWoV5cqVY8SIEZQoUQKAVatW8f777zNmzBhGjx5ttQVw+PBhJk2ahI+PD8OHD6dWrVpW+csvv8ykSZNo0qQJ5cqVs+p4eXnRoUMHqlevTvXq1dm/fz9jx4495+fpiSeeOOdjRURERK5Uv+4+wYJdJ6zta2PXcN3hVRgdumE0zD/6S6Q4uuBk8bHHHgPy9kg5yi637OxsFixYAMADDzxgJYoAvXr1YunSpWzfvp29e/dSrVq1Qts6ceIEf/75J15eXjz44IN5krt77rmHFStWsGzZMu6++24rIYTcpBTgrrvuylPeunVrmjdvzrp161i7di2tW7e29s2bN4+cnBy6detmJYoA5cuX55ZbbmHixInMnz+fAQMGWPv8/f3zJKqHDx8+x2dJRERERM7FzoQ0vlh7ekKbmkkHeWjXbIwyERh97ndjZCKX1wUni9dcc805lV0OO3bsICUlhYiICKpWrZpvf6tWrThw4ADr1q07a7K4ceNGTNOkXr16eZI+yO1FbdasGUuWLGHTpk3W4z169CgxMTH4+vrStGnTfG22bt2adevWsX79+jzJ4oYNG6z9/9WmTRsmTpzI+vXr8ySLIiIiInLpHE/L/ndCGxOAsMxknt06CV8zB9v9QzD8deuOXDmKxQQ3Bw4cAHCaKAJWgug47mLaqlq1KkuWLLEmowGs/1esWBFv7/xPqaOtM8+fkpJCQkICkDuhzX+VLl2akJAQ4uPjSU1Nddk9hXPmzCEuLg4fHx8qVqxIy5YtCQ0NdUnbIiIiIp4sK8fkf38eIjEtGwAvew7Pbp1EmYyTGNfdjFGrvpsjFLm8XJosfvrppwQFBXHfffed0/GTJ08mOTn5ooevOpKugmY8LVWqVJ7jzqUtR53/cpzjzLbOdv7C6gQFBeUZNvvfesnJySQkJFCpUqWzxn4uJk+enGd7woQJ3H///XTu3Nkl7YuIiIh4qm82HGFb/OkJbQbsnkO9k/uhXEWMm+92X2AibuLSZHHp0qWUKFHinJPFlStXkpCQcNHJYnp6OgB+fn5O9zuSMcdxF9OWozwjIyNfHV9f30LrnHn+s52noHoXqlmzZjRo0IBq1aoRGhrKkSNHWLJkCfPmzePzzz8nODiYli1bnlNbQ4cOzVfm6+vLW2+9BUCZMmUuOt6L4ejdDQ8Pd2sccuF0DT2brp/n0zX0fLqG5+/nrUf4+Z8T1nan2LV0P7wSbF6UfnoEPuUv3xJjun6er7hcQ5u7A3AF0zQvar+zYw3DOO84zqfOxZznQgwYMICWLVtSpkwZfH19qVixIvfeey8PPvggAFOmTLkscYiIiIgUNdviknln8S5ru3pSNI/smoUBBPXpj0+Nuu4LTsSN3HrPYlJSUqE9a+cqICAAyNvbdyZHeUHDPZ21VVBvnqOtM+N2tHs+5z/bec437gvVuXNnpk+fTmxsLEePHqVs2bJnrfP+++8Xuj8hIeG8EnRXc/yC486lXOTi6Bp6Nl0/z6dr6Pl0Dc/difRsnp+/n8yc3O8uoVkpPL91Ir72bKhcg7RrepJ+mZ9HXT/PVxSuoWEYeZbguxBu6VlMTU3lp59+IjMzk4iIiItuzzHsMTEx0en+Y8eO5TnuXNpy1PkvxznObOts5y+sTkpKSoEJo7N6rmaz2axrcPz48Ut2HhEREZGiJttu8s6fh0hMzZ3QxmbaeebfCW3w9sE2YAiGk8kLRa4UF/XqnzFjBt9//32eshMnTtCvX79zbqNVq1YXEwIAlStXBmDfvn1O9+/duzfPcRfTlqP8zLYcs5lGR0eTnZ2db0ZUR50zJ6kJCgqiTJkyJCQksH//furUqZOnTmJiIsnJyZQpU8ZlM6EWJCUlBbi0PZgiIiIiRc34DUf5++jpCW367/6JBidyvzcat9yNUd41EwyKeCq33bPo7e1Np06duPnmmy+6rTp16hAYGMiRI0ecJnmrV68GcLoG4n81btwYwzDYvn07J0+ezLMvKyuL9evXYxgGTZo0scrLli1LVFQUmZmZ1tqJZ1q1ahWQO8nMmRzxOPafaeXKlecc88WIjo7m8OHD+Pn5ERV1+W7cFhEREXGnJXtP8tPO06OqOiZspueh5bkbNethdLnRTZGJFB0X1bN4zTXXUL9+7nozpmny2muvERwczNNPP11gHcMwCAgIoHz58gXOHnq+vL296d69OzNnzuTrr7/mpZdesnrJ5s6dy4EDB6hTpw41atSw6ixYsIAFCxbQsmVL7rzzTqu8ZMmStGvXjmXLljF27FiGDBmCl5cXkLvsRFJSEldffTUlSpTIE0OvXr344osvmDJlCrVr1yYsLAzITVTXrVtH2bJladGiRZ46PXr0YNGiRSxcuJC2bdtSq1YtAGJjY5k1axY2m40ePXpc9POzadMmQkNDrfUmHQ4cOMDo0aMxTZPOnTs7XSNSREREpLjZcyydT9fEWdtVs4/z6LbpGAB+/tjuH4Jh83JbfCJFxUVlB+Hh4Xmmgy1TpgxhYWHUq1fvogM7X71792bLli3s3LmTwYMHU6dOHRISEti1axchISE8/vjjeY5PSkri8OHDTu/T69+/P7t27WL16tUMGTKE6tWrEx0dTXR0NBEREU6XBunUqRMbN25kzZo1DBkyhIYNG5KcnMy2bdvw8fHhySefzJeMlS9fnrvvvpuJEycyfPhwrrrqKry8vNi8eTOZmZnce++9lC9fPt+5xo4da/WgJiUlAbB27VoOHDhgHTNy5Ejr///88w/ff/894eHhREREEBoaytGjR9m3bx85OTnUq1cvT8IsIiIiUlwlpWczammMNaFNiC2H59d9jp89CwCj7wCM8Eh3hihSZLi0K+mTTz5xZXPnxdfXl+HDhzNr1iyWLVvG2rVrCQoKomPHjvTr1++8JokJDQ1l1KhRfPfdd6xdu5Y1a9YQFhZG9+7d6du3L8HBwfnq2Gw2hg4dyrx581iyZAnr16/H39+fFi1a0K9fPypWrOj0XL169SIyMpKffvqJ7du3A1CtWjVuvPFGmjdv7rROTEwMu3btylN28uTJfMNmHRo3bkxiYiJ79uzhwIEDpKamEhAQQJ06dWjfvj2dOnXCZisWq6iIiIiIFCjHbvLOssPEOya0AZ7eMomy6f92HjRoinF1N/cFKFLEGKY71ziQYik2NlZLZ8hF0TX0bLp+nk/X0PPpGjr3zYajzN5+esb7+06u46aN3+VuBAZhe/VjjJKl3RPcGXT9PF9RuIYeu3SGiIiIiMjl9Mf+pDyJYnu/JG50JIqAceejRSJRFClKlCyKiIiISLG273g6H62KtbarBNt4/PcPcie0AWjWFqNlB7fEJlKUKVkUERERkWIrKSOHUX8csia0Cfa18dzOqfhn5K4zTWgJbHc9jmEYhbQicmVSsigiIiIixVKO3eS9ZYc4cip3plObAU977yJy13rrGNu9AzFCQt0VokiRpmRRRERERIqlyX/Fsyku1dq+u7KNRr+MtbaNdtdiNGrpjtBEPIKSRREREREpdpYdSGLmttMT2rStEMRNCz+CnJzcglLhGP0eclN0Ip5ByaKIiIiIFCv7j6czZuXpCW0qh/kx8OgSjEMHrDJb/0EYAYHuCE/EYyhZFBEREZFi49S/E9pk/DuhTZCvjReqpOG/8AfrGKNzL4y6jdwVoojH8L7Qitu2bXNZEPXq1XNZWyIiIiJyZcqxm7y/4jBx/05oYwBDW5Qh4ssXwMxNHomIwuh9n/uCFPEgF5wsjhgxwiUBGIbBtGnTXNKWiIiIiFy5pm5OYP3hFGv7rkZlaLr8O8z4uNwCw4bt/sEYfn5uilDEs7h9GKrp+JVHREREROQCrTyYzIytidZ2m4rB3GpEY/4+zyozrr8Vo3odd4Qn4pEuuGdx+vTpTsvXrVvHJ598QkhICDfeeCMNGjSgdOnSGIZBYmIiW7Zs4aeffiIpKYmBAwfSrFmzCw5eREREROTgyQxGnzGhTYVQXwY1CsV84+XTB1WoinHD7W6ITsRzubRnce/evXzwwQdUrlyZd999ly5duhAZGYmPjw/e3t5ERETQpUsX3nnnHSpXrsz777/P/v37XRmCiIiIiFxBUjJzGLU0hvRsOwCBPjZe7FgB/+/HwYl/exq9vLE9MATD28eNkYp4Hpcmi7NnzyY7O5uHHnoIX1/fAo/z9fXlwQcfJDs7m9mzZ7syBBERERG5QthNkw9WHOZwcpZVNrRtecrvXo+5aolVZtx0J0aFqu4IUcSjuTRZ3LlzJ4GBgURFRZ312AoVKhAYGMj27dtdGYKIiIiIXCGmbUlg7aHTE9rccVUZmodmY5/86emDqtXGuO4WN0Qn4vku+J5FZ06dOgWA3W7HZis8D7Xb7WRmZpKZmenKEERERETkCrA6OpnpW05PaNOyQjB96pfC/tlbkHwyt9DXF9uApzC8vNwUpYhnc2nPYqlSpcjOzmbt2rVnPXbt2rVkZ2dTqlQpV4YgIiIiIsVczMkMPlhxekKbqFBfhrQph7F6KWxaZZUbt/bHiCjvjhBFigWXJostW7YE4Msvv2Tr1q0FHrdt2za+/PLLPHVERERERM7mVGYOb/5xiLR/J7QJ8LbxYocoAk8dw5z65ekD6zbCuKaHe4IUKSZcOgy1d+/erFq1ioSEBF577TXq1KlD/fr1KVWqlLV0xtatW9mxYwcAZcqUoXfv3q4MQURERESKqfRsO68vieFQ0unbmIa0LUdUqC/20R9B2r/3LwYEYus/COMst0WJSOFcmiwGBQUxfPhwPvjgA/bu3cuOHTusxPC/qlatytChQwkKCnJlCCIiIiJSDGXl2Bm1NIYdCWlWWb+GpWldMQT7knmwbZNVbtz+EEapcDdEKVK8uDRZBChbtiwjR45k9erVLF++nL1793LyZO5NxmFhYVSrVo22bdvSunXrs06CIyIiIiJXNvuiOdgbteadbZlsiku1yrvVKMEdDctgHj2M+f03pys0boXRprMbIhUpflyeLALYbDbatGlDmzZtLkXzIiIiInIFsC+aQ870cXy0M5vVJepZ5R0qh/JIiwgw7di/Hg2ZGdY+o3INDMNwQ7Qixc8lSRZFRERERC5a49aM3Z7K0jMSxRZRwQxuWw4vm4F9/mzYc8YtT6El1Kso4kKXdBxoUlISe/bsYdu2bZfyNCIiIiJSDE2OhgWlGlvbDU8d5Nl6vnjbDMyY/Zg/Tj59sJ8/thffwyitexVFXOWS9CyuW7eOGTNmsH//fgAMw2DatGnW/lOnTvHhhx8C8PTTT+Pv738pwhARERERD/X934n8sO2YtV0r9TAvbPwS7wOlsA95FfPLdyAnJ3enzYbxwv+UKIq4mMuTxdmzZzN16tQ8ZaZp5tkODg7Gz8+PtWvXsnHjRt3bKCIiIiKWn3ceZ9Jf8dZ2lRJ+vHJtfQL2lYL4OMxhj4Npt/Yb9w3CVqGKGyIVKd5cOgx1165dTJ06FS8vL+677z7GjRtHWFiY02OvvvpqILcXUkREREQEYPHek3y57oi1XT7EhxGdKxISGYHt6ZFgs+VJFGnVEVtb3acocim4tGdx3rx5ANx888306NGj0GPr1cu9UXnPnj2uDEFEREREPNTKg8l8tCrW2i4T6M1r11aiREDuV1b7ysVgt+epY/Toe1ljFLmSuLRncceO3NmounfvftZjQ0JC8Pf359ixY2c9VkRERESKt42xKby7/BD2f+9eKuHvxevXViI8yAfTNMn59gv4cUq+eubHr2MmxucrF5GL59JkMSkpiYCAAEJDQ8/peC8vL7Kzs10ZgoiIiIh4mG1HU3lzaQzZ/3YaBvnaGNG5IuVDfTGzs7F/+Q4s+fl0hbCSGENeg/BIiI/D/t5LShhFLgGXJou+vr5kZGRg/8/wAGdSU1NJSUkhKCjIlSGIiIiIiAfZcyyd13+PITMnt0vR39tgeKeKVCnpj5mRjn30cFi37HSFsuWxvfgetvqNc+9hVMIocsm4NFksX748drudgwcPnvXY1atXA1ClShVXhiAiIiIiHiL6ZAavLo4mNSu3o8HHZvBSxwrULhOAmZyE/e3nYeeW0xWq1MT24rsYpcoAYJQOV8Iocgm5NFls1qwZkLt8RmHi4uL49ttvAWjRooUrQxARERERD3DkVCav/BZNUkbuWoleBjx3dXmuigzCjI/LTRSj952u0KAptudGYQQF52nnvwmjuXHl5XwYIsWaS2dD7d69O/Pnz2flypX4+vpy00035dl/5MgRli9fzk8//URqaiply5alU6dOrgxBRERERIq4xNQsXvktmmNpuXNXGMCQtuVpWSEE8+Ae7GNeg5PHT1do3Qnb/YMwbF5O23MkjObGldi63HgZHoHIlcGlyWJgYCDPPfccb775JkuXLmXp0qXWvnvuuYfMzExrOzg4mKeffhofHx9XhiAiIiIiRVhSejbDF0cTdyrLKnu8VSQdqoRibv8L+6dvQnqatc+4+W6MHn0wDKPQdo3S4RhKFEVcyqXDUAFq1qzJ//73P1q1apXnTX1motiiRQtGjRql+xVFREREriCpWTm8uiSG6JOnvxcOaFqW62qUwL56KfYPR5xOFG02jP6DsPXse9ZEUUQuDZf2LDqEh4czdOhQTp06xT///MPx48ex2+2UKFGC2rVrn/PSGiIiIiJSPGRk23l9SQx7jqVbZf0aluamuqWw/zobc8bXpw/29cP2yHMYV2luCxF3uiTJokNwcDBNmza9lKcQERERkSIuK8fkrT8OsS3+9PDSG+qU5Pb6pbDP+Brz19mnDw4OwfbkKxjVal/+QEUkj0uaLIqIiIjIlS3HbvLe8sNsiE2xyrpUD2PAVSXh69GYa07PcUHpstiGjMCIjHJDpCLyXy5NFrOzszlx4gTe3t6UKFEiz7709HS+++47tmzZgs1mo0mTJvTu3RtfX19XhiAiIiIiRYTdNPl4dRwro5OtsnaVQnisUSjmR6/D9r9OH1yxKrbBr2KElXRDpCLijEuTxd9++42vv/6ajh078vjjj+fZN2rUKHbs2GFt79+/nx07djB8+HDdtCwiIiJSzJimybj1R1m896RV1qx8EEMaBGC8+xIc3Hv64LqNsD32fxgBgW6IVEQK4tLZUP/6K/fXofbt2+cpX7duHTt27MAwDNq3b0/nzp3x9vZm+/bt/PHHH64MQURERESKgG83JzB35+m1EhuUDeC52ja8/vd8nkTRaNkB26BXlCiKFEEu7Vk8dOgQANWqVctTvmzZMgBuuukm7rjjDgCqVq3KuHHjWLZsGR07dnRlGCIiIiLiRjO3JfLd34nWds3S/rxYJR2fd16HU0lWudH1Jozb7sewuXw1NxFxAZe+M5OSkvDz8yM4ODhP+datWwG49tprrbIOHToAcODAAVeGICIiIiJutGDXcSZsjLe2K4X58nJEIv6jh+VNFPvcj63vA0oURYowl/Yspqen55uw5ujRoyQlJVGmTBnKli1rlfv7+xMYGMipU6dcGYKIiIiIuMnSfSf5fM0Razsy2IfhIQcI/vxDsNtzC728Me4fjK2VRpaJFHUuTRaDg4NJSkoiJSWFoKAgAP7++28AatWqle94u92Ov7+/K0MQERERETdYHZPM6JWxmP9ulw70ZoRtCyUnf336IL8AbI//H0a9xu4IUUTOk0v7/R33Ki5evBjITQaXLFkCQP369fMcm5SURHp6er4lNkRERETEs/wVl8I7fx7G/m+mGObnxaupKwifc0aiGFoC23NvKlEU8SAu7Vns2LEjmzZt4ttvv2XLli0kJSWxb98+/P39adOmTZ5jt2/fDkBUlBZdFREREfFUO+LTeHNpDFn/ZoqBPjZeSVxE1Lr5pw8qWx7bkFcxwiPdFKWIXAiXJott27blr7/+4vfff7eW0fDx8eGhhx6yhqU6rFixAsjf4ygiIiIinmHf8XRe+z2a9OzcRNHPy2DY4blU3fr76YOq1MxdGiMkzD1BisgFc2myCPDYY4/RqVMn/vnnHwIDA7nqqqvyTGwDkJ2dTWBgIB07dqRp06auDkFERERELrGYpAyGL44mJTN34hpvA144MJs6u5efPqhBM2yPPo/hpzkqRDyRy5NFgDp16lCnTp2CT+rtzSOPPHIpTi0iIiIil9jRU1m88ls0J9NzALAZ8PS+mTTav8o6xmh7LcY9T2B4X5KvmyJyGejdKyIiIiLn7HhaNq8sPkhiarZV9uTuWbSKPiNR7NEX4+a7MAzDHSGKiItcsmQxOzubzZs3s2fPHk6ePAlAWFgY1atX56qrrsJbvzKJiIiIeJTkjByG/xZNbHKWVfbwnjl0jF6Zu2EYGHc8jK1TTzdFKCKudEkytgULFjBjxgxOnTrldH9wcDC33XYb119//aU4vYiIiIi4WGpWDiOWRHPgZIZVdvfe+XSPXpa74e2D7cGnMZq1dVOEIuJqLk8WP//8c2ttRYBSpUpRqlQpAI4dO8axY8c4deoU48ePZ9++fTz++OOuDkFEREREXCgj287IpYfYlZhuld164Dd6H/z3O19AELaBL2HUauCmCEXkUnBpsrhs2TIrUbz66qu57bbbiIzMu55OXFwcP/zwA3/88QdLly7lqquuon379q4MQ0RERERcJNtu8r8/D/H3kVSr7PqY5dy575fcjRKlsQ0ejlGhinsCFJFLxubKxn799VcAunfvzsCBA/MligCRkZE88cQTdO/eHYBffvnFlSGIiIiIiIvk2E0+WHGYdYdTrLJOcet4YPccDIByFbH93/+UKIoUUy5NFg8cOIBhGNx2221nPdZxzMGDB10ZgoiIiIi4gGmafLYmjmUHkq2y1vFbeHzn99gwoUZdbM+/hVEq3I1Risil5NJhqIZhEBQUREhIyFmPDQkJISgoCLvd7soQREREROQimabJNxuOsnDPSaus8bGdPLXtW7xMOzRuje2hpzF8/dwYpYhcai7tWSxXrhypqamkp6ef9dj09HTS0tIoX768K0MQERERkYs0/e9Eftxx3Nque2Ifz/09ER8zB6Njd2yPPa9EUeQK4NJksVOnTtjtdubPn3/WYxcsWIDdbqdz586uDEFERERELsKP248xdXOCtV0tOYYXt3yDvz0L46a7MO56DMPm5cYIReRycekw1Ouuu45t27Yxffp0srOzueGGG/D3989zTHp6OnPnzuWHH36gbdu2dOnSxZUhiIiIiMgFWrj7BF9vOGptV0g5wsubxxFkz8S4dyC2q69zY3Qicrm5NFn89NNP8fX1JSAggO+//545c+ZQvXr1POss7tmzh8zMTAIDA/Hx8eHTTz/N145hGDz22GOuDE1ERERECvHn/iQ+WR1nbUekJTL8r68IM7KwPfEiRqOWboxORNzBpcni0qVL82xnZmayfft2p8empqbmO/5MShZFRERELo91h07xwYrDmP9ul8xIYvhfX1Hax8T25BsY1eu4NT4RcQ+XJosdOnTAMAxXNikiIiIil9CWIym8/echcv7NFEOyUnj1ry+JDPLGNvgNjHIV3BugiLiNS5PFJ554wpXNiYiIiMgl9E9CGm/8HkPmv5liQHY6r/w1loqlgrANfgWjRGk3Rygi7uTSZFFEREREPMP+4+mMWHyQ9OzcRNE3J5OXtnxN9ahS2B5/ESMwyM0Rioi7KVkUERERucLEJmcyfNEBTmXlJore9mye/3si9WtWwBjwFIaPj5sjFJGiQMmiiIiIyBUkPiWLl3/Zy4nM3G2baeepbd/StGltjL4PYNhcugy3iHiwS5IsnjhxgsWLF7Nz504SExPJyMjANE2nxxqGwUcffXQpwhARERGRM5xIz+aV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YVFERERERETcKCyKiIiIiIiIG4VFERERERERcaOwKCIiIiIiIm4UFkVERERERMSNwqKIiIiIiIi48fF0AdL9mEwmT5cAdJ06pPM0ht5N4+f9NIbeT2Po3TR+3s+TY3gmzm0yDMM4A7WIiIiIiIhIN6LHUEVERERERMSNwqJ0O/fffz/333+/p8uQ06Ax9G4aP++nMfR+GkPvpvHzft1lDPXOonQ7NpvN0yXIadIYejeNn/fTGHo/jaF30/h5v+4yhrqzKCIiIiIiIm4UFkVERERERMSNwqKIiIiIiIi4UVgUERERERERN1pnUURERERERNzozqKIiIiIiIi4UVgUERERERERNwqLIiIiIiIi4kZhUURERERERNwoLIqIiIiIiIgbhUURERERERFxo7AoIiIiIiIibnw8XYDI6aqrq+Pbb79l27ZtHDp0iKKiIhwOBwkJCYwbN46ZM2cSEBDg6TKlA6qrq5k/fz6VlZUkJiby7LPPerokaafy8nI+/PBDduzYQXFxMX5+fsTFxTFs2DCuv/56T5cnp5CVlcXy5cvZv38/1dXVBAQE0KdPHy699FLGjx/v6fIEOHz4MLt27eLgwYMcOHCAsrIyfH19eeutt9rs9+WXX7Jy5Ury8vLw8fFh4MCBXHPNNQwaNOgcVS5NOjKGDoeD/fv3s23bNjIzMyksLKSmpobo6GiGDRvGVVddRVxcnAeu4vzV2c/B5h599FF2794NwMsvv0xERMRZqvb0KSyK11u3bh3/+Mc/AEhJSWHEiBGcOHGCrKwsli1bxvr163n44YcJDw/3cKXSXm+88QZVVVWeLkM6KCsri8cffxyr1UpycjKjR4+mtraWvLw8MjIyFBa7uA0bNvDss89iGAb9+vVjyJAhlJWVsWfPHr777juuvPJKrrvuOk+Xed5777332Lp1a4f6vPHGG3zyySf4+fkxfPhw6uvr2bVrF99++y333HMPY8eOPUvVSks6MoaFhYUsWLAAgKioKAYOHIjZbObgwYOsWrWK9evX84c//IHU1NSzWbI005nPwebWrl3L7t27MZlMGIZxBis7OxQWxev5+Phw6aWXcvnll9OjRw/n9rKyMp544gmys7N5/fXXueuuuzxYpbTX7t27+fLLL5k+fTqrVq3ydDnSTqWlpTz++OPU19dz3333uf3wefDgQQ9VJu1ht9t59dVX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o1py++23U1RUxMsvv9yllz7RT9Pi9RwOB8899xx79uxh8ODB3HfffV43LbGIt2taN+qf//yny29HDx8+TEZGBgCXXHKJR2qTUxs9ejQAe/fu5bPPPnNpy8rK4pNPPgFaXthduramgPj++++Tn5/v3J6VlcWqVasIDAxk2rRpnipP2iEjI4MPP/yQiIgIHnroIefjxSLngn6iFq+3cuVKNm/eDEBoaKjbu29NbrjhBq99uVikq7v44ovZvXs3GzduZP78+QwcOJC6ujr2799PQ0MDF198sYJGF9a3b1+uuOIKPv74YxYvXsx//vMfkpKSKCsrIysrC8MwmD59OsOHD/d0qee97du387//+78u2xoaGnjggQecf//5z3/OBRdcAMDw4cOZMWMGK1as4He/+x3Dhg3Dbreza9cuHA4Hd955JyEhIef0Gs53HRnDI0eOsHTpUgDi4uJ4//33WzzmxRdf3CXfd+uOOvo56O0UFsXrNX+Hpik0tuSXv/ylwqLIWWI2m5k/fz6ff/45q1evdj562q9fPy655BIuuugiD1cop3LDDTcwaNAgPv/8cw4fPsyxY8cICAggLS2Niy++mEmTJnm6RKHxvaYDBw64bDMMw2Xbye8+3XTTTfTu3ZuVK1eye/duLBYLQ4cO5ec//7kChgd0ZAyb3gWHxrvBTe+3nWzIkCEay3OkM5+D3sxkaIEdEREREREROYneWRQRERERERE3CosiIiIiIiLiRmFRRERERERE3CgsioiIiIiIiBuFRREREREREXGjsCgiIiIiIiJuFBZFRERERETEjcKiiIiIiIiIuFFYFBERERERETcKiyIiIiIiIuJGYVFERERERETcKCyKiIichx5++GFmz57NsmXLPF2KiIh0UT6eLkBEREQ6zzAMNm7cyLp168jOzqaiogKz2UxERAQRERH079+fwYMHM3ToUIKCgjxdroiIeBGFRRERES9ltVr585//TGZmpnObxWLB39+f4uJiCgoK2L9/P5988gm33XYbU6ZMce4XExNDYmIiYWFhHqhcRES8gcKiiIiIl/rrX/9KZmYmZrOZGTNmcMkllxAfH4/ZbMZut5OXl8fOnTtZt26dW9877rjDAxWLiIg3MRmGYXi6CBEREemY/Px87rrrLgCuvfZarrrqqjb3t9ls+Pn5nYPKRESku9CdRRERES905MgR58ejR48+5f4nB8WHH36YzMxMfvGLXzB79mzn9hdffJEvv/yyXTW0NDlOTU0NK1euZOvWreTn51NXV0d4eDiDBg1ixowZDBw4sF3HFhERz1NYFBER8XKlpaUkJyefkWMFBQURHh7eanttbS11dXUtth04cIA//elPVFRUAGA2m/H396ekpIRvvvmGDRs28Ktf/Yqrr776jNQqIiJnl8KiiIiIF+rXrx8mkwnDMFiyZAn33HMPiYmJp33cm2++mZtvvrnFtuLiYv7nf/6Huro60tPTXdoKCwt57LHHsFqtjB8/nquuuopevXphsVioqKhg5cqVfPjhh/zrX/8iKSmJsWPHnnatIiJydiksioiIeKG4uDimTZvGF198wffff8/dd99N7969GTBgAH379qV///6kpKRgMpnOyPlqamp44oknKC8vp2fPnsyfP9+l/c0338RqtXLRRRe5TZ4THh7OnDlzCA4OZsmSJbz77rsKiyIiXkBhUURExEvNmzePiIgIMjIyqKurIzs7m+zsbGd7eHg4kyZN4sorryQiIqLT53E4HDzzzDN8//33hIeHc//99xMYGOhsr66uZtOmTQBtTrQzefJklixZQk5ODuXl5adVk4iInH0KiyIiIl7KYrEwZ84crrjiCrZu3UpmZiaHDh3i6NGjNDQ0UFFRwSeffMJXX33FH/7wB/r379+p87z22mt8++23+Pr68rvf/Y6YmBiX9qysLJomV3/kkUfadczi4mKFRRGRLk5hUURExMsFBQVx0UUXcdFFFwGNy2Ts27ePTz/9lG3btlFVVcVTTz3Fc8891+HlMzIyMvjss88wmUzcfvvtDBgwwG2f0tJS58dNk9ucSmuT5IiISNehsCgiItLN+Pn5MXz4cIYPH+5cCqOkpISdO3d26F3BrVu3snTpUgDmzJnDhRde2OJ+DofDed4333zz9C9ARES6BLOnCxAREZGzZ/r06c6Pjx071u5+hw8f5rnnnsMwDC666CKuueaaVvdtepzUZrNx/PjxTtcqIiJdi8KiiIhINxYQEOD82NfXt119SkpKePLJJ6mrqyM1NZXf/OY3be4/aNAg56yr69ev73yxIiLSpSgsioiIeKHCwsJ23Sn88ssvnR/36dPnlPvX1tbyxBNPUFZWRnx8PPfddx8+Pm2/tRIeHs7o0aMBWL58+Snrqq6uPmUdIiLieXpnUURExAvl5ubypz/9iZEjR3LhhRcyePBg4uLiAGhoaCA3N5dPP/2UtWvXAtC/f39SU1NPedxnnnmGnJwcgoOD+f3vf09YWFi76pk7dy779u2jqqqKP/7xj1x77bWMHz+eoKAgACorK9m7dy9ff/01dXV1PPDAA527cBEROWcUFkVERLyQxWLBMAx27NjBjh07APDx8SEgIACr1epcygIa7yjed999mM2nfqCo6Vg2m+2Uy2C88sorzo/j4+N58MEH+ctf/kJRURF///vf+cc//kFQUBB2u53a2lrnvsOGDevQtYqIiGcoLIqIiHihkSNH8vzzz7N9+3b27dtHbm4upaWlWK1W/Pz8iIqKonfv3owbN47x48e3Kyg2V19f3+5lMJr06dOHZ555htWrV7NlyxZycnKwWq34+PjQo0cP+vXrx+jRo0lPT+/QcUVExDNMRvNfPYqIiIiIiIigCW5ERERERESkBQqLIiIiIiIi4kZhUURERERERNwoLIqIiIiIiIgbhUURERERERFxo7AoIiIiIiIibhQWRURERERExI3CooiIiIiIiLhRWBQRERERERE3CosiIiIiIiLiRmFRRERERERE3CgsioiIiIiIiBuFRREREREREXGjsCgiIiIiIiJuFBZFRERERETEjcKiiIiIiIiIuFFYFBERERERETcKiyIiIiIiIuJGYVFERERERETc/P8QkdQXzKZL1gAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots()\n", "ax.plot(size, elapsed, marker='x')\n", "\n", "# Approximate elapsed time with 3rd order polynomial\n", "z = np.polyfit(size, elapsed, 3)\n", "appxf = np.poly1d(z)\n", "\n", "ax.plot(size, appxf(size))\n", "ax.legend(['Elapsed', 'Approximate with 3rd order polynomial'])\n", "ax.set_xlabel('Size')\n", "ax.set_ylabel('Elapsed time')" ] }, { "cell_type": "markdown", "id": "50f071f1", "metadata": {}, "source": [ "- Forward elimination\n", " - 첫번째 pivot (이후 n-1 rows)\n", " * each row: n번 Add/sub, n+1번 Mul\n", " - 두번째 pivot (이후 n-2 rows)\n", " * each row: (n-1)번 Add/sub, n번 Mul\n", " - ...\n", " - 마지막 pivot (마지막 row)\n", " * last row: 2번 Add/sub, 3번 Mul\n", " \n", " - Total\n", " * Add/Sub\n", " \n", " $$\n", " \\sum_{k=1}^{n-1} (n-k)(n+1-k)= \\frac{1}{3} n^3 - \\frac{1}{3} n\n", " $$\n", " \n", " * Mul\n", " \n", " $$\n", " \\sum_{k=1}^{n-1} (n-k)(n+2-k)= \\frac{1}{3} n^3 + \\frac{5}{2} n^2 - \\frac{17}{6}\n", " $$ \n", " \n", " * All : $\\frac{2}{3} n^3 + O(n^2)$\n", " \n", "- Backward substitution\n", " - $O(n^2)$" ] }, { "cell_type": "markdown", "id": "c6210c9e", "metadata": {}, "source": [ "## 문제점\n", "- Round-off Error\n", "\n", "- Pivot이 0일 때\n", " * Row exchange 필요\n", " \n", "- ill-conditioned system\n", " * 2x2 선형 방정식\n", "\n", " $$\n", " \\left [\n", " \\begin{matrix}\n", " 1 & 1 \\\\\n", " 1 & 1+\\epsilon_1\n", " \\end{matrix}\n", " \\right ]\n", " \\left [\n", " \\begin{matrix}\n", " x \\\\ y\n", " \\end{matrix}\n", " \\right ]\n", " =\n", " \\left [\n", " \\begin{matrix}\n", " 2 \\\\ 2 + \\epsilon_2\n", " \\end{matrix}\n", " \\right ]\n", " $$\n", "\n", " - $\\epsilon_2=0$ : $(x,y) = (2, 0)$\n", " - $\\epsilon_2 \\ne 0$ : $(x,y) = (1, 1)$" ] }, { "cell_type": "code", "execution_count": 26, "id": "bc8a7a04", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([2., 0.])" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "e1 = 1e-3\n", "a = np.array([[1, 1], [1, 1+e1]])\n", "b = np.array([2, 2])\n", "\n", "gauss_eliminate(a, b)" ] }, { "cell_type": "code", "execution_count": 27, "id": "b5f18cde", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([1., 1.])" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "e1 = 1e-3\n", "a = np.array([[1, 1], [1, 1+e1]])\n", "b = np.array([2, 2+e1])\n", "\n", "gauss_eliminate(a, b)" ] }, { "cell_type": "code", "execution_count": 28, "id": "703795c0", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Exponent of e2: -1, Sol : [1. 1.]\n", "Exponent of e2: -2, Sol : [1. 1.]\n", "Exponent of e2: -3, Sol : [1. 1.]\n", "Exponent of e2: -4, Sol : [1. 1.]\n", "Exponent of e2: -5, Sol : [1. 1.]\n", "Exponent of e2: -6, Sol : [1. 1.]\n", "Exponent of e2: -7, Sol : [1. 1.]\n", "Exponent of e2: -8, Sol : [1. 1.]\n", "Exponent of e2: -9, Sol : [1. 1.]\n", "Exponent of e2: -10, Sol : [1. 1.]\n", "Exponent of e2: -11, Sol : [1. 1.]\n", "Exponent of e2: -12, Sol : [1. 1.]\n", "Exponent of e2: -13, Sol : [1. 1.]\n", "Exponent of e2: -14, Sol : [0.97777778 1.02222222]\n", "Exponent of e2: -15, Sol : [1.2 0.8]\n" ] } ], "source": [ "for n in range(1, 16):\n", " e1 = 10**(-n)\n", " \n", " a = np.array([[1, 1], [1, 1+e1]])\n", " b = np.array([2, 2+e1])\n", " \n", " x = gauss_eliminate(a, b)\n", " print(\"Exponent of e2: -{}, Sol : {}\".format(n, x))" ] }, { "cell_type": "markdown", "id": "adfa40df", "metadata": {}, "source": [ "## Pivoting\n", "- 계산의 순서를 바꾸서 Round-off 오차에 의한 연산 오류를 최소화 함.\n", "- 종류\n", " * Partial pivoting: $i$ 번째 컬럼 (부분 행렬에서 첫번째) 에서 절대값이 가장 큰 row를 Pivot row로 설정\n", " \n", " * Complete pivoting: 부분 행렬에서 크기가 가장 큰 성분을 포함하는 row를 Pivot row로 설정\n", " * 미지수도 재배치 됨 \n", "\n", "- Scaling\n", " * 각 row 계수의 크기를 표준화해서 오차를 줄임\n", " * Scaled partial pivoting\n", " - 각 row에서 계수의 크기가 최대인 값을 factor로 지정: $s_i = \\max_{j}|a_{ij}|$\n", " - j 번째 Pivot을 정할 때 $|a_{ij}|/s_i$ 가 최대인 row를 선택해서 Pivot row로 설정\n", "\n", "### 예제\n", "다음 선형 방정식을 계산하시오.\n", "\n", "$$\n", "\\begin{bmatrix}\n", "0.0003 & 3.0 \\\\\n", "1.0 & 1.0\n", "\\end{bmatrix}\n", "\\cdot\n", "\\mathbf{x}\n", "=\\begin{bmatrix}\n", "2.0001 \\\\ 1\n", "\\end{bmatrix}\n", "$$" ] }, { "cell_type": "code", "execution_count": 29, "id": "c279fbb7", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0.3334796 , 0.66666662])" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Gauss elimination\n", "A = np.array([[0.0003, 3.0], [1, 1]], dtype=np.float32)\n", "b = np.array([2.0001, 1.0], dtype=np.float32)\n", "\n", "gauss_eliminate(A, b)" ] }, { "cell_type": "code", "execution_count": 30, "id": "1bd3508b", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0.3333334, 0.6666666])" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Swap first and second row (Partial pivoting)\n", "A = np.array([[1, 1], [0.0003, 3.0]], dtype=np.float32)\n", "b = np.array([1.0, 2.0001], dtype=np.float32)\n", "\n", "gauss_eliminate(A, b)" ] }, { "cell_type": "code", "execution_count": 31, "id": "08b405fa", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0.33333333, 0.66666667])" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Scaled\n", "A = np.array([[3.0, 30000.0], [1, 1]], dtype=np.float32)\n", "b = np.array([20001, 1.0], dtype=np.float32)\n", "\n", "gauss_eliminate(A, b)" ] }, { "cell_type": "markdown", "id": "7143ea5e", "metadata": {}, "source": [ "### 예제\n", "다음 선형방정식을 Paritial Pivot 기법을 이용하여 계산하시오.\n", "\n", "$$\n", "\\begin{bmatrix}\n", "3 & -13 & 9 & 3 \\\\\n", "-6 & 4 & 1 & -18 \\\\\n", "6 & -2 & 2& 4 \\\\\n", "12 & -8 & 7 & 10\n", "\\end{bmatrix}\n", "\\cdot\n", "\\mathbf{x}\n", "=\\begin{bmatrix}\n", "-19 \\\\ -34 \\\\ 16 \\\\ 26\n", "\\end{bmatrix}\n", "$$\n", "\n", "#### by hand" ] }, { "cell_type": "code", "execution_count": 32, "id": "77429747", "metadata": {}, "outputs": [], "source": [ "A = np.array([\n", " [3, -13, 9, 3],\n", " [-6, 4, 1, -18],\n", " [6, -2, 2, 4],\n", " [12, -8, 6, 10]\n", "])\n", "\n", "b = np.array([-19, -34, 16, 26])" ] }, { "cell_type": "code", "execution_count": 34, "id": "8d049f09", "metadata": {}, "outputs": [], "source": [ "# Iniitial Index\n", "n = 4\n", "l = [0, 1, 2, 3]" ] }, { "cell_type": "code", "execution_count": 35, "id": "cf4347e9", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 3 6 6 12]\n", "[3, 1, 2, 0]\n" ] } ], "source": [ "# 첫번째 Pivot 결정\n", "j = 0\n", "print(abs(A[:, j]))\n", "\n", "# 4번째 row를 Pivot로 결정, index array\n", "i = np.argmax(abs(A[:, j]))\n", "\n", "l[i], l[j] = l[j], l[i]\n", "print(l)" ] }, { "cell_type": "code", "execution_count": 36, "id": "e4b877e6", "metadata": {}, "outputs": [], "source": [ "# Eliminate a[1, 0]\n", "i = l[0]\n", "k = 1\n", "ratio = A[k, j] / A[i, j]\n", "\n", "A[k] = A[k] - ratio*A[i]\n", "b[k] = b[k] - ratio*b[i]" ] }, { "cell_type": "code", "execution_count": 37, "id": "05b052f3", "metadata": {}, "outputs": [], "source": [ "# Eliminate a[2, 0]\n", "k = 2\n", "ratio = A[k, j] / A[i, j]\n", "\n", "A[k] = A[k] - ratio*A[i]\n", "b[k] = b[k] - ratio*b[i]" ] }, { "cell_type": "code", "execution_count": 38, "id": "68cf027c", "metadata": {}, "outputs": [], "source": [ "# Eliminate a[0, 0]\n", "k = 0\n", "ratio = A[k, j] / A[i, j]\n", "\n", "A[k] = A[k] - ratio*A[i]\n", "b[k] = b[k] - ratio*b[i]" ] }, { "cell_type": "code", "execution_count": 39, "id": "4d9f7d93", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 0 -11 7 0]\n", " [ 0 0 4 -13]\n", " [ 0 2 -1 -1]\n", " [ 12 -8 6 10]] [-25 -21 3 26]\n" ] } ], "source": [ "# Result of first pivot\n", "print(A, b)" ] }, { "cell_type": "code", "execution_count": 40, "id": "9e9c6189", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 0 2 -11]\n", "[3, 0, 2, 1]\n" ] } ], "source": [ "# 두번째 Pivot 결정\n", "j = 1\n", "\n", "# 1, 2, 3 행에서 scaled 값 비교\n", "print(A[l[j:], j])\n", "i = np.argmax(abs(A[l[j:], j])) + j\n", "\n", "# Swap indexes \n", "l[i], l[j] = l[j], l[i]\n", "print(l)" ] }, { "cell_type": "code", "execution_count": 41, "id": "8581c172", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0 2\n" ] } ], "source": [ "# Eliminate a[1, 1]\n", "i = l[j]\n", "k = l[j+1]\n", "print(i, k)\n", "ratio = A[k, j] / A[i, j]\n", "\n", "A[k, j:] = A[k, j:] - ratio*A[i, j:]\n", "b[k] = b[k] - ratio*b[i]" ] }, { "cell_type": "code", "execution_count": 42, "id": "90536606", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0 1\n" ] } ], "source": [ "# Eliminate a[1, 1]\n", "k = l[j+2]\n", "print(i, k)\n", "ratio = A[k, j] / A[i, j]\n", "\n", "A[k, j:] = A[k, j:] - ratio*A[i, j:]\n", "b[k] = b[k] - ratio*b[i]" ] }, { "cell_type": "code", "execution_count": 43, "id": "5b3965ab", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 0 -11 7 0]\n", " [ 0 0 4 -13]\n", " [ 0 0 0 -1]\n", " [ 12 -8 6 10]] [-25 -21 -1 26]\n" ] } ], "source": [ "# Result of second pivot\n", "print(A, b)" ] }, { "cell_type": "code", "execution_count": 44, "id": "455638b6", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0 4]\n", "[3, 0, 1, 2]\n" ] } ], "source": [ "# 세번째 Pivot 결정\n", "j = 2\n", "\n", "# 1, 2, 3 행에서 scaled 값 비교\n", "print(A[l[j:], j])\n", "i = np.argmax(abs(A[l[j:], j])) + j\n", "\n", "# Swap indexes \n", "l[i], l[j] = l[j], l[i]\n", "print(l)" ] }, { "cell_type": "code", "execution_count": 45, "id": "07badd71", "metadata": {}, "outputs": [], "source": [ "# Eliminate a[1, 1]\n", "i = l[j]\n", "k = l[j+1]\n", "ratio = A[k, j] / A[i, j]\n", "\n", "A[k, j:] = A[k, j:] - ratio*A[i, j:]\n", "b[k] = b[k] - ratio*b[i]" ] }, { "cell_type": "code", "execution_count": 46, "id": "6033b3e8", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 0 -11 7 0]\n", " [ 0 0 4 -13]\n", " [ 0 0 0 -1]\n", " [ 12 -8 6 10]] [-25 -21 -1 26]\n" ] } ], "source": [ "# Result of third pivot\n", "print(A, b)" ] }, { "cell_type": "code", "execution_count": 47, "id": "fff56ae4", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[3, 0, 1, 2]\n", "[[ 12 -8 6 10]\n", " [ 0 -11 7 0]\n", " [ 0 0 4 -13]\n", " [ 0 0 0 -1]] [ 26 -25 -21 -1]\n" ] } ], "source": [ "# Index\n", "print(l)\n", "print(A[l], b[l])" ] }, { "cell_type": "code", "execution_count": 49, "id": "03e0f75c", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1.0" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Back substitution\n", "n = 4\n", "x = np.empty(4)\n", "\n", "# Back substitution at last index\n", "x[n-1] = b[2] / A[2, n-1]\n", "x[n-1]" ] }, { "cell_type": "code", "execution_count": 50, "id": "9edf6b2c", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "-2.0" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Back substitution at last second index\n", "x[n-2] = (b[1] - A[1, n-1]*x[-1]) / A[1, n-2]\n", "x[n-2]" ] }, { "cell_type": "code", "execution_count": 51, "id": "d10a1121", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1.0" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Back substitution at 2nd index\n", "i = 1\n", "x[i] = b[l[i]]\n", "\n", "for j in range(i+1, n):\n", " x[i] -= A[l[i], j]*x[j]\n", " \n", "x[i] /= A[l[i], i]\n", "x[i]" ] }, { "cell_type": "code", "execution_count": 52, "id": "ea47d9aa", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "3.0" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Back substitution at 1st index\n", "i = 0\n", "x[i] = b[l[i]]\n", "\n", "for j in range(i+1, n):\n", " x[i] -= A[l[i], j]*x[j]\n", " \n", "x[i] /= A[l[i], i]\n", "x[i]" ] }, { "cell_type": "code", "execution_count": 53, "id": "738ae313", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 3. 1. -2. 1.]\n" ] } ], "source": [ "print(x)" ] }, { "cell_type": "code", "execution_count": 54, "id": "db73050f", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([-19., -34., 16., 26.])" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Validation\n", "A = np.array([\n", " [3, -13, 9, 3],\n", " [-6, 4, 1, -18],\n", " [6, -2, 2, 4],\n", " [12, -8, 6, 10]\n", "])\n", "\n", "A @ x" ] }, { "cell_type": "markdown", "id": "2706a01c", "metadata": {}, "source": [ "### DIY\n", "- Partial Pivot을 하는 Gauss Elimination 함수를 작성하시요." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.2" } }, "nbformat": 4, "nbformat_minor": 5 }